Django如何局部渲染

xst*_*ter 39 django django-templates django-views

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

谢谢

Ali*_*and 57

我想你在找{% include '_partial.html' %}.


Mic*_*tra 28

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 %}
Run Code Online (Sandbox Code Playgroud)


Bra*_*don 12

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

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

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

  • 没关系,你在谈论 http://docs.djangoproject.com/en/1.3/howto/custom-template-tags/。所以我可以加载任何方法 (2认同)

uta*_*ngo 5

我已经改编了这段代码并将其作为pypi 包提供。

  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 %}在模板中使用标签:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

GitHub 上提供了包含这些示例的测试项目