使用变量和数据库数据填充Django模板吗?

时间:2019-03-09 18:02:00

标签: python django

我正在使用Django创建具有不同类型的单词/术语的应用程序。在一页上,您可能拥有标题“条款”,然后是条款列表。在另一页上,除了短语(标题,短语列表)外,其他内容完全相同。

是否可以做这样的事情->

  1. 存储标题和术语列表
  2. 存储标题和短语列表
  3. 创建一个模板,该模板用于显示广告的标题和列表 页面
  4. 调用一些使用以下功能的Django函数(不确定是否存在) 生成条款页面的模板
  5. 使用相同的Django 使用相同模板来生成页面的函数 词组

希望是,我可以避免拥有一个大的模板文件夹,里面装满了基本上在做相同事情的页面。例如,现在,如果我想添加短语_in_spanish和短语_in_french,则必须添加两个基本上做相同事情的新模板->显示标题和列表。我要做的就是将标头和列表存储在某个地方,让Django完成其余工作来创建页面。这样一来,从技术上讲,我可以拥有1000页,而不必编写1,000个只显示标题和列表的不同模板文件。

模板示例:

{% extends "profile/base.html" %}

{% block content %}

    <div class="row">
        <div class="col-sm-6">
            <a href="{% url 'profile:new_term' %}">Add a New Term</a>
            <p>Terms:</p>
            <ul>
                {% for term in terms %}
                    <li><p><a href="{% url 'profile:term' term.id %}">{{ term.name }}</a> : {{ term.definition }}</p></li>
                    <a href="{% url 'profile:edit_term' term.id %}">Edit Term</a>
                    <a href="{% url 'profile:delete_term' term.id %}">Delete Term</a>
                {% empty %}
                    <li>No terms have been added yet.</li>
                {% endfor %}
            </ul>
        </div>
    </div>
{% endblock content %}

2 个答案:

答案 0 :(得分:2)

您不必为每个页面创建一个html模板。

您必须在urls.py上创建URL分配器:

url(r'^(P<list_name>\w+)/$', views.your_view)

因此,您不必拥有具有相同结构的许多模板,而仅渲染具有所需信息的模板。

因此您的视图应如下所示:

def your_view(request, list_name):
    list = get_object_or_404(List, pk=list_name)
    context = {
        'list_info':list.info
    }
   return render(request, 'your_app/template.html', context)

当然,在此示例中,您需要在数据库上有一个主键为List的名为list_name的表。

答案 1 :(得分:1)

也许可能有一个名为Concept的通用模型(可能是术语,短语或标题或类似的东西)和诸如ConceptDetail的相关模型(可能是列表)术语或短语列表等)。

然后,您只有一个URL配置,但是不同的概念在URL中出现了不同的PK,以区分它们(您也可以将URL中的条形文字用作“变节”,以使URL更具可读性)。例如:

path('concept/', ConceptListView.as_view()),
path('concept/<slug:concept_name>/', ConceptDetailView.as_view()),

对于视图和模板,您有一个ListView,它向您显示了所有概念(在这里您可以添加过滤和其他搜索选项),然后在每个概念的DetailView中,您可以显示其概念相关的ConceptDetail实例。

这听起来对您有帮助吗?