【问题标题】:Django how to partial renderDjango如何部分渲染
【发布时间】:2011-08-09 15:26:25
【问题描述】:

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

谢谢

【问题讨论】:

  • 好问题。我真的很惊讶它没有引起很多关注。
  • 博客链接失效。

标签: django django-templates django-views


【解决方案1】:

我已改编 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 %}标签:

{% 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 %}

包含这些示例的test project 可在 GitHub 上找到。

【讨论】:

  • django.template.context_processors.request 在 TEMPLATES / context_processors 中。可以吗?
  • 谢谢,我已经更新了我的答案。旧版本用于 Django
【解决方案2】:

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

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

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

【讨论】:

  • 但这只能让我在模板中嵌入模板,而不能在模板中嵌入视图。假设我有 10 层嵌套,那么这 10 层需要的所有变量都需要在渲染第一层之前在视图的第一层设置...或者将视图逻辑放在中间层的模板文件中
  • 没关系,你说的是docs.djangoproject.com/en/1.3/howto/custom-template-tags。所以我可以加载任何方法
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      相关资源
      最近更新 更多