我正在使用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 %}
答案 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实例。
这听起来对您有帮助吗?