【发布时间】:2017-12-14 02:51:15
【问题描述】:
背景:我正在通过使用 Django 1.11 开发一个简单的待办事项列表应用程序来学习 Django。该应用程序具有“组”和“项目”,其中项目是单独的待办事项,每个项目都属于一个组。 URL 最终可能会像这样工作:
# snippet from urls.py
url(r'^groups$', views.all_groups, name="all_groups"),
url(r'^groups/(\d+)/$', views.view_group, name="view_group"),
url(r'^items$', views.all_items, name="all_items"),
url(r'^items/(\d+)/$', views.view_item, name="view_item"),
上述每个页面都将显示一个或两个列表(例如,所有项目,或特定组中的所有项目等),其中每个表元素都是指向页面的链接,以显示特定组或特定项目。
我对上述每个 URL 都有一个单独的视图,但是我能够使用一个 HTML 模板来成功呈现每个表。根据 URL,URL 标签有 0 个或 1 个参数:{% url 'my_url' %} 或 {% url 'my_url' arg1 %}
这是一个 HTML 模板的 sn-p,它可以用任意数量的行和列呈现表格,但 url 标签最多两个参数:
# lists.html - works for several different views
# every table entry is a dictionary with an 'page_ref' key and a 'display_text' key
<table>
{% for row in url_table %}
<tr>
{% for col in row %}
{% if col.arg2 %}
<td><a href="{% url col.page_ref col.arg1 col.arg2 %}">{{col.display_text}}</a></td>
{% elif col.arg1 %}
<td><a href="{% url col.page_ref col.arg1 %}">{{col.display_text}}</a></td>
{% else %}
<td><a href="{% url col.page_ref %}">{{col.display_text}}</a></td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</table>
我的问题:
1) 我在 HTML 模板中处理 {% url 'my_url' %} vs. {% url 'my_url' arg1 %} vs. {% url 'my_url' arg1 arg2 %} 的代码有效,但它很丑陋且有限URL 上最多 2 层。这对我想要的可能没问题,但我不喜欢代码。有没有更简洁的方法来处理任意数量的参数?当我尝试在不需要时简单地不传递 arg1/arg2 时,我收到了一个关于无法反转 '' 的异常(或一些类似的错误消息)。
2) 一般来说,制作这样的通用模板是个坏主意吗?即,每个视图有一个特定的 HTML 模板而不使其更通用是一种更好的做法?我的猜测是否定的,但我想我会问。
我也可以提供视图代码,但我认为我的问题不需要它。
谢谢
【问题讨论】:
标签: python django django-templates