Django自定义响应标头

8
我需要在Django项目中设置自定义响应头。
这是来自facts/urls.py的代码:
d = {
    'app_name': 'facts',
    'model_name': 'Fact'
}

urlpatterns = patterns('',
    (r'^$', 'facts.main', d),
)

这种方法显示来自模型的数据,但我不确定是否有办法在此处设置自定义标题?
另外,我尝试了另一种方法 - 我创建了facts/views.py,并编写了以下函数:
def fact(request):

    response = render_to_response('facts.html', 
                                  {'app_name': 'facts',
                                   'model_name': 'Fact'}, 
                                  context_instance=RequestContext(request))

    response['TestCustomHeader'] = 'test'

    return response

并在 urls.py 中更改了代码:

(r'^$', facts.views.fact),

这种方法设置自定义标头,但不显示模型数据。
需要帮助吗?

你的问题不够清晰,因为我没有看到关于你的响应的头部操作... Django在文档中涵盖了头部信息:https://docs.djangoproject.com/en/1.6/ref/request-response/#django.http.HttpRequest.META - petkostas
我在第二个方案中添加了自定义标头(TestCustomHeader),可以在firebug中看到它。但是在这种情况下,模型没有加载。 - Phantom
为什么应该查看模型数据?实际上你并没有从任何地方获取任何模型数据... 你应该查看Django文档以进一步理解: https://docs.djangoproject.com/en/1.6/topics/http/views/ - petkostas
我只是不想放太多的代码。人们不会去读它... 我在facts应用程序中有一个Fact模型,并且在第一次尝试(在urls.py中)中它可以正常工作,但是在views.py中它没有被加载。我无法理解为什么。 - Phantom
因为views.py和urls.py的工作方式不同,实际上您应该处理代码而不是读者,在urls.py中过载任务也不可读,开发人员期望在相应的位置找到视图数据。 在视图函数中,您必须实际执行操作(调用模型,提取数据并将其分配给响应),这不是Django的方式,这是大多数框架处理视图/控制器的方式。 - petkostas
1个回答

7
当你在urls.py中将字典传递给views.main时,函数def main() 处理{"model_name": "Fact"}。可能有一些类似以下代码的内容:
model = get_model(kwargs["model_name"])
return model.objects.all()

当你将 "model_name" 传递给 render_to_response 时,字典将作为上下文传递到模板。如果在你的模板中包含{{model_name}},页面应该呈现Fact
在类视图中设置自定义标题,在类中定义一个函数:
def get(self, request):
    response = HttpResponse()
    response["TestCustomHeader"] = "test"

    return response
    

或者从函数的角度来看:
def main(request):
    response = HttpResponse()
    response["TestCustomHeader"] = "test"

    [ Some code to fetch model data ]

    return response

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接