Learning Log
{% bl..._{% block content %} {% endblock %}不生效django">赞
踩
再创建几个页面,把搞到的数据展示出来
网页模板继承:网页有些共用的部分,这个就抽离出来,避免写重复代码
在index.html所在的目录下,再创建一个base.html
base.html
- <p>
- <a href = "{% url 'learning_logs:index' %}">Learning Log</a>
- </p>
- {% block content %}{% endblock content %}
再把之前的index.html改一下
index.html
- {% extends "learning_logs/base.html" %}
- {% block content %}
- <p>Learning Log helps you keep track of your learning, for any topic you're learning about.<p>
- {% endblock content %}
先搞个显示Topics的页面
首先改learning_logs/url.py
- """定义learning_logs的URL模式"""
- from django.conf.urls import url
- from . import views
-
- urlpatterns = [
- # 主页
- url(r'^$', views.index, name='index'),
- # 显示所有的主题
- url(r'^topics/$', views.topics, name='topics'),
- ]
新加了个路径匹配我们的新的函数方法(没有编写呢),再修改views.py
- from django.shortcuts import render
- from .models import Topic
- # Create your views here.
-
-
- def index(request):
- """学习笔记的主页"""
- return render(request, 'learning_logs/index.html')
-
-
- def topics(request):
- """显示所有主题"""
- topics = Topic.objects.order_by('date_added')
- # 这里定义了一个将要发送给模板的上下文,是一个字典,其中的键在模板中将用来访问数据
- context = {'topics': topics}
- return render(request, 'learning_logs/topics.html', context)

就差个接收数据的页面了
topic.html,跟那几个页面放一起
- {% extends "learning_logs/base.html" %}
- {% block content %}
- <p>Topics</p>
- <ul>
- {% for topic in topics %}
- <li>{{topic}}</li>
- {% empty %}
- <li>No topics have been added yet.</li>
- {% endfor %}
- </ul>
- {% endblock content %}
再改动下base.html让父模板中包含直接跳转Topic这个页面的a标签
- <p>
- <a href = "{% url 'learning_logs:index' %}">Learning Log</a> -
- <a href = "{% url 'learning_logs:topics' %}">Topics</a>
- </p>
- {% block content %}{% endblock content %}
效果如图
现在要把Chess也变成能点击的,显示具体的内容(一个新页面)
先在learning_logs/urls.py中增加url
- """定义learning_logs的URL模式"""
- from django.conf.urls import url
- from . import views
-
- 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'),
- ]
还得去views.py里添加个方法
- from django.shortcuts import render
- from .models import Topic
- # Create your views here.
-
-
- def index(request):
- """学习笔记的主页"""
- return render(request, 'learning_logs/index.html')
-
-
- def topics(request):
- """显示所有主题"""
- topics = Topic.objects.order_by('date_added')
- # 这里定义了一个将要发送给模板的上下文,是一个字典,其中的键在模板中将用来访问数据
- context = {'topics': topics}
- return render(request, 'learning_logs/topics.html', context)
-
-
- def topic(request, topic_id):
- """显示单个主题及其所有的条目"""
- topic = Topic.objects.get(id=topic_id)
- # date_added前边的减号是按降序排列的意思
- entries = topic.entry_set.order_by('-date_added')
- context = {'topic': topic, 'entries': entries}
- return render(request, 'learning_logs/topic.html', context)

date_added前边的减号是按降序排列的意思
然后写个topic.html放在一起
- {% extends "learning_logs/base.html" %}
- {% block content %}
- <p>Topic:{{topic}}</p>
- <p>Entries:</p>
- <ul>
- {% for entry in entries %}
- <li>
- <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
- <!--linebreaks将包含换行符的长条目转换为浏览器能够理解的格式,以免显示为一个不间断的文本块-->
- <p>{{ entry.text|linebreaks }}</p>
- </li>
- {% empty %}
- <li>There are no entries for this topic yet.</li>
- {% endfor %}
- </ul>
- {% endblock content %}

还得修改topics.html中的一些内容
- {% extends "learning_logs/base.html" %}
- {% block content %}
- <p>Topics</p>
- <ul>
- {% for topic in topics %}
- <li>
- <a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a>
- </li>
- {% empty %}
- <li>No topics have been added yet.</li>
- {% endfor %}
- </ul>
- {% endblock content %}
然后再打开页面就能看效果了,如下:
我在这里其实碰到了几个坑爹问题主要是自己写错了,报的错误也不准,
大家注意下第一处:
topics.html中<a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a> 这句话应该是learning_logs:topic冒号,结果我写成了learning_logs/topic
第二处:
learning_logs里的urls.py
- """定义learning_logs的URL模式"""
- from django.urls import path
-
- from . import views
-
- urlpatterns = [
- # 主页
- path('', views.index, name='index'),
- # 显示所有的主题
- path('topics/', views.topics, name='topics'),
- # 特定主题的详细页面
- path('topics/<int:topic_id>/', views.topic, name='topic'),
- ]
django2版本和1有区别,2用path,更加简化匹配路径,1用的url,当然2用url也可以的好像是
第三处:
views.py里面def topic(request, topic_id):这里我少写个参数,导致在控制台上打印什么gbk错误,那个错误它报的不对,我修改了learning_log\ll_env\Lib\site-packages\django\views里面的debug.py里面的
第331行,加了utf-8编码,然后发现了错误原因是topic() got an unexpected keyword argument 'topic_id'才发现少写了个参数
请继续看第三部分,用户部分以及相关操作和安全
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。