【问题标题】:Django custom response headersDjango 自定义响应标头
【发布时间】:2014-01-16 15:09:34
【问题描述】:

我需要在 Django 项目中设置自定义响应头。

这是来自facts/urls.py的代码:

d = {
    'app_name': 'facts',
    'model_name': 'Fact'
}

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

这种方法显示来自模型的数据,但我不确定是否可以在此处设置自定义标头?

我还尝试了另一种方法 - 我使用以下函数创建了 fact/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 涵盖文档中的标题:docs.djangoproject.com/en/1.6/ref/request-response/…
  • 我在第二种方法中添加了自定义标题(TestCustomHeader),并且可以在萤火虫中看到它。但是在这种情况下没有加载模型。
  • 为什么要查看模型数据?您实际上并没有在任何地方获取任何模型数据...您应该查看 Django 文档以进一步了解:docs.djangoproject.com/en/1.6/topics/http/views
  • 我只是不想放大量代码。人们不会阅读它......我在事实应用程序中有 Fact 模型,它在第一种方法中工作正常(在 urls.py 中),但它没有加载到 views.py 中。我不明白为什么
  • 因为 views.py 与 urls.py 的工作方式不同,实际上你应该处理代码,而不是阅读器,用任务重载 urls.py 也不可读,开发人员期望查看数据在相应的地方可以找到。在您的视图函数中,您必须实际进行操作(调用模型,获取数据并将它们分配给响应)这不是 Django 方式,这是大多数框架在处理视图/控制器时的工作方式。

标签: python django custom-headers


【解决方案1】:

当您将字典传递给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

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2020-08-22
    • 2018-02-17
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多