模版1-django
模版1-django
@(python)
- 为了测试效果,通过admin后台管理添加一些实例
+----+-------+------+-----+-------------+
| id | name | sex | age | email |
+----+-------+------+-----+-------------+
| 1 | liton | male | 18 | qq@163.com |
| 2 | mike | male | 19 | mike@qq.com |
| 3 | mach | male | 20 | mach@qq.com |
+----+-------+------+-----+-------------+
- for 标签
- 修改users文件夹下的views.py的代码,如下
from django.shortcuts import render
from django.shortcuts import render_to_response
from users.models import Info
def show(request):
r = Info.objects.all()
return render_to_response('show.html', {'user_list':r})
- 修改urls.py,添加`url('^show/$', 'users.views.show'),`
from django.conf.urls import include, url
from django.contrib import admin
from mysite.views import hello
from mysite.views import current_datetime
urlpatterns = [
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^hello/$', hello),
url('^time/$', current_datetime),
url('^info/$', 'mysite.views.info'),
url('^show/$', 'users.views.show'),
]
- 添加模版文件,在templates文件夹下新建show.html
<html>
<head>
<title>测试Django模板</title>
</head>
<body>
{% for item in user_list %}
<p>{{ forloop.counter }}: {{ item.name }}</p>
{% endfor %}
</body>
</html>
- 打开浏览器http://ip:8000/show/,显示如下
1: liton
2: mike
3: mach
- forloop.counter 总是一个表示当前循环的执行次数的整数计数器。 这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1。
- forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。 第一次执行循环时这个变量会被设置为0。
- forloop.revcounter 是表示循环中剩余项的整型变量。 在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数。 最后一次循环执行中,这个变量将被置1。
- forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。在第一次执行循环时,该变量会被置为序列的项的个数减1。
- forloop.first 是一个布尔值,如果该迭代是第一次执行,该值为真True,之后为False.
- forloop.last 是一个布尔值;在最后一次执行循环时被置为True。
- forloop 变量仅仅能够在循环中使用。 在模板解析器碰到`{% endfor %}`标签后,forloop就不可访问了
- locals()
locals()返回一个包含当前作用域里面的所有变量和它们的值的字典。不需要手动构造字典。
for标签的例子,与下面的代码得到的效果是一样的。
from django.shortcuts import render
from django.shortcuts import render_to_response
from users.models import Info
def show(request):
user_list = Info.objects.all()
return render_to_response('show.html',locals())
- context标签
上下文context标签用于复用公共的变量,甚至全局变量。
修改users下的views.py文件
from django.shortcuts import render
from django.shortcuts import render_to_response
from django.template import RequestContext
from users.models import Info
def show(request):
#r = Info.objects.all()
#return render_to_response('show.html', {'user_list':r})
user_list = Info.objects.all()
return render_to_response('show.html',locals())
def custom_proc(request):
return {
'title': 'django',
'category': 'context',
}
def custom_proc_1(request):
return {
'section': '1',
}
def show_context(request):
user_list = Info.objects.all()
return render_to_response('show_context.html', {'user_list':user_list},context_instance=RequestContext(request, processors=[custom_proc,custom_proc_1]))
新增模版文件show_context.html
<html>
<head>
<title>{{title}}:{{category}}:{{section}}</title>
</head>
<body>
<p>{{title}}:{{category}}:{{section}}</p>
{% for item in user_list %}
<p>{{ forloop.counter }}: {{ item.name }}</p>
{% endfor %}
</body>
</html>
同时新增url规则
url('^show_context/$', 'users.views.show_context'),
django自带context_processor的字典
def auth(request):
return {
'user': user,
'messages': user.get_and_delete_messages(),
'perms': PermWrapper(user),
}
def debug(request):
context_extras = {}
context_extras['debug'] = True
context_extras['sql_queries'] = connection.queries
return context_extras
def i18n(request):
context_extras = {}
context_extras['LANGUAGES'] = settings.LANGUAGES
context_extras['LANGUAGE_CODE'] = translation.get_language()
context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
return context_extras
def media(request):
return {'MEDIA_URL': settings.MEDIA_URL}
def request(request):
return {'request': request}