我试图生成一个网站的主页,其中包含不同类型的不同部分。有一个'关于我们'部分,一个'最近的项目'部分等,我的目标是离开视图逻辑和模板呈现的个人应用程序组成这个项目(关于,投资组合等)。我目前的解决方案是动态构建django模板,然后呈现它,如下所示:
在myapp/templatetags/myapp中_标签.py:
@register.simple_tag
def render_sections(sections):
template = ""
for section in sections:
if section.type == "about":
template += "{% load about %}"
template += "{% render_about_section %}"
elif section.type == "portfolio":
template += "{% load portfolio %}"
template += "{% render_portfolio_section %}"
return render_to_string(template)
在模板中/索引.html:
{% load myapp_tags %}
{% block content %}
{% render_sections %}
{% endblock %}
既然我已经在动态地构建一个模板,我就在想:为什么我不能使用django的模板系统来呈现django模板呢?可以替换上述代码的示例模板如下:
{% for s in sections %}
{% load {{s.type}} %}
{% render_{{s.type}}_section %}}
{% endfor %}
我能做些什么来让它工作?有没有更好的方法来呈现异类项目的列表?你知道吗
我在Django文档中找到了我自己问题的答案:
我已经解决了这个问题,用视图函数替换了定制的
render_[app]_section
templatetags,这些函数接受一个请求对象并返回一个字符串。例如,下面是公文包应用程序的render_section
函数:我已经创建了一个定制的templatetag(
render
),它知道如何调用单个应用程序的render_section
视图。以下是我用来呈现主页的模板:您可以将
TEMPLATE_STRING_IF_INVALID = '{{ %s }}'
添加到设置中。这将用{{ variable_name }}
替换每个无效变量,如here所述。你知道吗但这有一些主要缺点:
{% for x in y %}
)不是一个完整的答案,但它可能会帮助一些人。你知道吗
相关问题 更多 >
编程相关推荐