Django:从模板中调用视图

时间:2012-10-30 13:31:17

标签: python django templates view

如何在布局(模板)中调用视图?

例如:我在我网站的每个页面上都有一个表单。我需要为每个页面生成CSRF令牌,但我不想将生成代码放在每个视图上。

谢谢。

2 个答案:

答案 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>