1.render函数解析
def home(request):
# return HttpResponse('Hello, World!')
boards = Board.objects.all()
return render(request, 'boards/home.html', {'boards': boards})
#context意思这里的home.html在Django中称作Template(模板文件),使用render方法将第三个参数中的值替换Template中的指定模板参数,最终返回一个正常的HTML页面。
以下为home.html文件对应boards参数上下文代码:
{% for board in boards %}
<tr>
<td>
<a href="{% url 'board_topics' board.pk %}">{{ board.name }}</a>
{# <a href="{% url 'home' %}">{{ board.name }}</a>#}
<small class="text-muted d-block">{{ board.description }}</small>
</td>
<td class="align-middle">0</td>
<td class="align-middle">0</td>
<td></td>
</tr>
{% endfor %}
2、<link>标签定义文档与外部资源的关系,最常见用途是链接样式表。
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
<a></a>标签定义超链接,用于从一张页面链接到另一张页面。
<a class="navbar-brand" href="{% url 'home' %}">Django Boards</a>
3、模板标签
html中{% url 'board_topics' board.pk %}
返回指定视图函数和可选参数对应的绝对路径(不带域名的 URL)。路径中的特殊字符会使用iri_to_uri()编码。使用这种方式输出链接符合 DRY 原则,因为无需在模板中硬编码 URL。
{% url 'some-url-name' v1 v2 %}第一个参数是视图函数的路径,格式为package.package.module.function,可以是放在引号里的字面量,也可以是上下文变量。余下的参数是可选的,以空格分开,用于指定 URL 中的参数。
4、url函数用法
urlpatterns = [
path('', views.home, name='home'),
url(r'^sign/$', accounts_views.signup, name='signup'),
url(r'^login/$', auth_views.LoginView.as_view(template_name='boards/login.html'), name='login'),
url(r'^logout/$',auth_views.LogoutView.as_view(),name='logout'),
url(r'^boards/(?P<pk>\d+)/$', views.board_topics, name='board_topics'),
url(r'^boards/(?P<pk>\d+)/new/$', views.new_topic, name='new_topic'),
path('admin/', admin.site.urls),
]
url函数正则表达式
url(r'^boards/(?P<pk>\d+)/$', views.board_topics, name='board_topics')
^表示以...开头,\d表示0-9的数字,$表示以...结尾;
前面的一个 r 表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符。
(?P<pk>\d+)分组匹配
P是正则表达式中的命名组的意思,可以将这个P看成是单词Pattern的缩写