Django如何局部渲染

时间:2011-04-20 15:55:15

标签: django django-templates django-views

如何从RoR中的部分渲染等模板级别调用视图方法?问题在blog中得到了很好的说明。我可以使用include在模板中包含模板,但是我必须匹配模板层的所有变量名称。我真的希望在模板中包含视图并解耦图层。该博客是一年前写的。从那以后有更好的解决方案吗?

由于

4 个答案:

答案 0 :(得分:54)

我认为你正在寻找{% include '_partial.html' %}

答案 1 :(得分:27)

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#include

如果在包含partial时使用'with'参数,则不需要匹配变量 - 您可以在包含模板之前重命名变量。我发现这种技术使我能够创建更多可重用的模板。此外,它比创建包含标记少得多。例如:

{% include 'partials/blog_entry.html' with blog_entry=my_blog_entry %}

答案 2 :(得分:12)

模板标签绝对是在Django中实现此目的的方法。如果您需要将特定的东西传递给模板并让它渲染内容,您可以使用内置的包含标记,它接受传递给它们的变量。

现在,使用inclusion tags,您必须指定要呈现的模板的路径。 Django不会像在Rails中那样自动找到/your_app/views/_my_partial.html.erb

查看文档,看看是否能满足您的需求。如果没有,你可以随时自己编写。

答案 3 :(得分:3)

我已调整this snippet并将其设为pypi package

  1. pip install django_render_partial

  2. 'django_render_partial'添加到INSTALLED_APPS

  3. 确保'django.template.context_processors.request'位于TEMPLATES['OPTIONS']['context_processors']

  4. 在模板中使用{% render_partial %}标记:

  5. {% load render_partial %}
    
    {# using view name from urls.py #}    
    {% render_partial 'partial_view' arg1=40 arg2=some_var %}
    
    {# using fully qualified view name #}
    {% render_partial 'partial_test.views.partial_view' arg1=40 arg2=some_var %}
    
    {# class based view #}
    {% render_partial 'partial_test.views.PartialView' arg1=40 arg2=some_var %}
    

    GitHub上提供了包含这些示例的test project