如何在布局(模板)中调用视图?
例如:我在我网站的每个页面上都有一个表单。我需要为每个页面生成CSRF令牌,但我不想将生成代码放在每个视图上。
谢谢。
答案 0 :(得分:1)
在Django中,一旦你到达模板,我不相信你可以调用Zend的Action Helper效果。 显然,您可以对Django中的公开URL进行AJAX调用并检索必要的数据。在这种情况下,您可以将csrf令牌提供给ajax调用,如下所示。
$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' },});
我不是百分百肯定,但你可以在decorator中实现类似Zend的Action Helper(可以在处理请求之前应用于您选择的多个视图)或{{3} }(适用于所有视图的已处理请求)。
答案 1 :(得分:0)
如果您的表单只是HTML,那么只需拥有一个包含HTML的模板,并将其包含在其他模板中(或将其放在基本模板中)。要生成CSRF令牌,只需在模板中使用{%csrf_token%},如https://docs.djangoproject.com/en/dev/ref/contrib/csrf/中所述
如果你想生成一个Django表单的HTML,那么你可以添加一个上下文处理器 - 在https://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext解释 - 生成表单然后将可用于所有模板。
def form_processor(request):
form = Form()
return { 'form': form.as_p() }
模板:
<form>{% csrf_token %}{{ {{ form }}</form>