Py学习  »  Django

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

JustBlossom • 6 年前 • 2182 次点击  

我使用Django创建一个包含不同类型单词/术语的应用程序。在一个页面上,您可能有标题“条款”,然后是条款列表。在另一个页面上,除了短语(标题,短语列表)之外,您有完全相同的东西。

有可能做这样的事情吗-->

  1. 存储条件的标题和列表
  2. 存储短语的标题和列表
  3. 创建 用于在
  4. 生成术语页的模板
  5. 使用同一模板生成页面的函数 短语

希望我可以避免一个大的模板文件夹,里面的页面基本上都在做同样的事情。例如,现在,如果要添加西班牙语短语和法语短语,则必须添加两个基本上执行相同操作的新模板-->显示标题和列表。我只想把标题和列表存储在某个地方,让Django做剩下的工作来创建页面。因此,技术上我可以有1000页,而不必编写1000个不同的模板文件,这些文件都只是显示标题和列表。

{% 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 %}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54942
文章 [ 2 ]  |  最新文章 6 年前
Ralf
Reply   •   1 楼
Ralf    7 年前

也许有可能有一个称为 Concept (这可以是术语、短语、标题或类似的东西)使用类似的相关模型 ConceptDetail (可以是一系列术语或短语等)。

然后,您有一个URL配置,但是不同的概念有不同的pk,这些pk出现在URL中以区分它们(您还可以将URL中的slug用作kwargs以使URL更具可读性)。例如:

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

对于视图和模板,您有一个 ListView 它向您展示了所有概念(在这里您可以添加筛选和其他搜索选项),然后在 DetailView

这听起来像是能帮到你的吗?

Henrique Andrade
Reply   •   2 楼
Henrique Andrade    7 年前

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

你必须在 urls.py :

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