url的path中传入id参数的用法
一. url
"""定义learning_logs的URL模式"""
urlpatterns = [
# 主页
url(r'^$',views.index,name='index'),
# 显示所有的主题
url(r'^topics/$',views.topics,name='topics'),
# 特定主题的详细页面
url(r'^topics/(?P<topic_id>\d+)/$',views.topic,name='topic'),
url(r'^new_topic/$',views.new_topic,name='new_topic'),
url(r'^new_entry/(?P<topic_id>\d+)/$',views.new_entry,name='new_entry'),
]
其中url(r’^topics/$’,views.topics,name=‘topics’)不需要指定ID,直接导向视图函数topics。
二. views部分代码
def topics(request):
"""显示所有主题"""
topics = Topic.objects.order_by('date_added')
context = {'topics' : topics}
return render(request,'learning_logs/topics.html',context)
其中变量topics = Topic.objects.order_by(‘date_added’)存储了所有主题项目,并通过context渲染到topics.html。
三. 前端
topics.html部分代码
{% for topic in topics %}
<li>
<a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a>
</li>
遍历变量topics中的项目并创建到对应主题的链接,其中提供了实参topic.id即遍历时每个主题的ID,生成的链接样式如http://127.0.0.1:8000/topics/1/
四、定义显示特定主题的页面
上文urls.py里 url(r’^topics/(?P<topic_id>\d+)/$’,views.topic,name=‘topic’),捕获/topics/1/中的那个topic.id并存储到变量topic_id,再传递给视图函数views.topic
def topic(request,topic_id):
"""显示单个主题及其所有的条目"""
topic = Topic.objects.get(id=topic_id)
entries = topic.entry_set.order_by('-date_added')
context = {'topic' : topic,'entries' : entries}
return render(request,'learning_logs/topic.html',context)
topic = Topic.objects.get(id=topic_id),此时topic_id用来获取特定主题,最后完成渲染页面
五. 总结
从所有主题页面点击特定主题并显示,其中主题ID的传递流程:
视图函数topics获取所有主题然后渲染到topics.html
topics.html遍历所有主题并获取每个主题的id,存储到变量topic.id,同时生成如下格式的链接http://127.0.0.1:8000/topics/1/
访问topics.html每个主题链接时,通过url模式捕获topic.id存储到变量topic_id再传递给视图函数topic
视图函数topic渲染指定主题的页面
原文链接:https://blog.csdn.net/PanWeiBoWUHA/article/details/105876025
努力生活,融于自然