0

我正在使用包含标签来生成我的页面部分,这些部分在我的网站的许多不同位置重复。

模板标签/标签.py

@register.inclusion_tag('chunk_template.html')
def output_chunk(object, edit):
    ... # Lots of set up work here that I don't want to duplicate in the view
    return { ... }

在页面上提交表单的 AJAX 后,我需要刷新 output_chunk() 输出的相同 HTML。为避免在视图中完全重写 output_chunk() ,我按照此答案中关于如何在视图中使用模板标签的建议执行了以下操作

视图.py

def chunk(request, ...):
    context = Context({..., 'request': request })
    template_string = """
      {% load output_chunk from tags %}
      {% output_chunk ... %}
    """
    t = Template(template_string)
    return HttpResponse(t.render(context))

这一切都工作正常,除了 chunk_template.html 调用{% csrf %},当我以标准方式调用模板标签时,它工作,但当我以这种有点hacky的方式调用时(以避免两次编写相同的代码)。

return render (request, template_name, context)(对于更简单的模板标签,当我从视图中调用时,这很好用。)

那么,有没有更好的方法来从视图中调用模板标签以正确调用所有中间件?或者我可以在这个 hack 中添加一些东西以使其正常工作?

4

2 回答 2

1

我不明白问题的核心,但你总是可以手动拉取令牌(中间件调用这个函数)。

from django.middleware.csrf import get_token

csrf = get_token(request)
于 2012-11-05T22:28:26.060 回答
0

需要使上下文成为RequestContext。

context = RequestContext(request, {....})
于 2012-11-05T22:47:10.770 回答