Django学习笔记(四)-使用模板系统

一、使用模板系统

detail() 视图函数向模板返回question变量,模板处理如下:

<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>

模板系统统一使用点符号来访问变量的属性。在示例 {{ question.question_text }} 中,首先 Django 尝试对 question 对象使用字典查找(也就是使用 obj.get(str) 操作),如果失败了就尝试属性查找(也就是 obj.str 操作),结果是成功了。如果这一操作也失败的话,将会尝试列表查找(也就是 obj[int] 操作)。

{% for %} 循环中发生的函数调用:question.choice_set.all 被解释为 Python 代码 question.choice_set.all() ,将会返回一个可迭代的 Choice 对象,这一对象可以在 {% for %}标签内部使用。

二、去除模板中的硬编码url

使用 {% url %} 标签代替 polls/index.html 里编写投票链接时的硬编码

<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
改为
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

 {% url %}工作方式是在 polls.urls 模块的 URL 定义中寻具有指定名字的条目

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

三、为URL名称添加命名空间

polls 应用有 detail 视图,可能另一个博客应用也有同名的视图时,为了区分在根 URLconf 中添加命名空间。在 polls/urls.py 文件中稍作修改,加上 app_name 设置命名空间

from django.urls import path
​
from . import views
​
app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

编辑 polls/index.html 文件

<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
修改为
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页