Django之第一个app<15>
来源:互联网 发布:2am 2pm 知乎 编辑:程序博客网 时间:2024/05/11 08:40
使用模版系统
回到我们的投票应用的detail()
视图,给context一个question
这个变量,这里是polls/detail.html
模版的内容:
<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
做一个字典查询。Django会进行一个属性查询,在本例子中,是可以查询到的,如果属性查询失败的话,它不会尝试列表查询。
方法调用发生在{% for %}
循环中:question.choice_set.all
被翻译成python代码:question.choice_set.all()
,它会返回一个Choice
对象的遍历,适合在{% for %}
使用。
删除模版中硬编码的URLs
记住,当我们在polls/index.html
模版中写一个question的链接时,链接几乎是硬编码式的:
<li><a href="/polls/{{ question.id }}/">{{question.question_text }}</a></li>
这种硬编码、紧凑的代码格式的问题是改变拥有众多模版的工程中的URLs是非常具有挑战性的。但是,因为你在polls.urls
模块中的url()
函数中定义了name
参数,你可以通过使用{% url %}
这个模版标签来移除对特定URL路径的依赖。
<li><a href="{% url 'detail' question.id %}"> {{ question.question_text }}</a></li>
为URL名字起命名空间
这个指导教程只有一个应用,即polls
。在真正的Django工程中,可能有五个、十个、二十个甚至更多的应用。那么Django是如何区分这些URL名字呢?例如,polls
应用有一个detail
视图,并且polls所在工程中有一个blog
应用。当使用{% url %}
模版标签时,Django如何知道该为一个URL创建那个应用视图呢?答案是为你的根URLconf
添加一个命名空间。在mysite/urls.py
文件中,修改下代码,添加命名空间:
from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [ url(r'^polls/', include('polls.urls', namespace="polls")), url(r'^admin/', include(admin.site.urls)),]
现在,修改你的polls/index.html
模版,在polls/templates/polls/index.html
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
- Django之第一个app<15>
- Django之第一个app<1>
- Django之第一个app<2>
- Django之第一个app<3>
- Django之第一个app<4>
- Django之第一个app<5>
- Django之第一个app<6>
- Django之第一个app<7>
- Django之第一个app<8>
- Django之第一个app<9>
- Django之第一个app<10>
- Django之第一个app<11>
- Django之第一个app<12>
- Django之第一个app<13>
- Django之第一个app<14>
- Django之第一个app<16>
- Django之第一个app<17>
- Django之第一个app<18>
- poll&&epoll实现分析(二)——epoll实现
- poj 1823 Hotel(线段树·区间更新·lazy tag)
- 32位机和64位机编程时应该注意些什么
- HDU2.2.5 三角形
- 不要死性不改
- Django之第一个app<15>
- UVa 10635 - Prince and Princess(LCS转LIS)
- listview实现自动向上滚动,快速滚动,和滚动条的一些设置
- 简单工厂方法,工厂方法,抽象工厂方法
- web开发的几道笔试题
- 字符串相关处理函数
- 编写一个方法,确定某字符串的所有排列组合
- 二进制安全
- android获取存储空间