Learning Log

{% bl..._{% block content %} {% endblock %}不生效django">
当前位置:   article > 正文

python web小项目实践 用的Django (二)_{% block content %} {% endblock %}不生效django

{% block content %} {% endblock %}不生效django

再创建几个页面,把搞到的数据展示出来

网页模板继承:网页有些共用的部分,这个就抽离出来,避免写重复代码

在index.html所在的目录下,再创建一个base.html

base.html

  1. <p>
  2. <a href = "{% url 'learning_logs:index' %}">Learning Log</a>
  3. </p>
  4. {% block content %}{% endblock content %}

再把之前的index.html改一下

index.html

  1. {% extends "learning_logs/base.html" %}
  2. {% block content %}
  3. <p>Learning Log helps you keep track of your learning, for any topic you're learning about.<p>
  4. {% endblock content %}

先搞个显示Topics的页面

首先改learning_logs/url.py

  1. """定义learning_logs的URL模式"""
  2. from django.conf.urls import url
  3. from . import views
  4. urlpatterns = [
  5. # 主页
  6. url(r'^$', views.index, name='index'),
  7. # 显示所有的主题
  8. url(r'^topics/$', views.topics, name='topics'),
  9. ]

新加了个路径匹配我们的新的函数方法(没有编写呢),再修改views.py

  1. from django.shortcuts import render
  2. from .models import Topic
  3. # Create your views here.
  4. def index(request):
  5. """学习笔记的主页"""
  6. return render(request, 'learning_logs/index.html')
  7. def topics(request):
  8. """显示所有主题"""
  9. topics = Topic.objects.order_by('date_added')
  10. # 这里定义了一个将要发送给模板的上下文,是一个字典,其中的键在模板中将用来访问数据
  11. context = {'topics': topics}
  12. return render(request, 'learning_logs/topics.html', context)

就差个接收数据的页面了

topic.html,跟那几个页面放一起

  1. {% extends "learning_logs/base.html" %}
  2. {% block content %}
  3. <p>Topics</p>
  4. <ul>
  5. {% for topic in topics %}
  6. <li>{{topic}}</li>
  7. {% empty %}
  8. <li>No topics have been added yet.</li>
  9. {% endfor %}
  10. </ul>
  11. {% endblock content %}

再改动下base.html让父模板中包含直接跳转Topic这个页面的a标签

  1. <p>
  2. <a href = "{% url 'learning_logs:index' %}">Learning Log</a> -
  3. <a href = "{% url 'learning_logs:topics' %}">Topics</a>
  4. </p>
  5. {% block content %}{% endblock content %}

效果如图

现在要把Chess也变成能点击的,显示具体的内容(一个新页面)

先在learning_logs/urls.py中增加url

  1. """定义learning_logs的URL模式"""
  2. from django.conf.urls import url
  3. from . import views
  4. urlpatterns = [
  5. # 主页
  6. url(r'^$', views.index, name='index'),
  7. # 显示所有的主题
  8. url(r'^topics/$', views.topics, name='topics'),
  9. # 特定主题的详细页面
  10. url(r'^topics/(? P<topic_id>\d+)/$', views.topic, name='topic'),
  11. ]

还得去views.py里添加个方法

  1. from django.shortcuts import render
  2. from .models import Topic
  3. # Create your views here.
  4. def index(request):
  5. """学习笔记的主页"""
  6. return render(request, 'learning_logs/index.html')
  7. def topics(request):
  8. """显示所有主题"""
  9. topics = Topic.objects.order_by('date_added')
  10. # 这里定义了一个将要发送给模板的上下文,是一个字典,其中的键在模板中将用来访问数据
  11. context = {'topics': topics}
  12. return render(request, 'learning_logs/topics.html', context)
  13. def topic(request, topic_id):
  14. """显示单个主题及其所有的条目"""
  15. topic = Topic.objects.get(id=topic_id)
  16. # date_added前边的减号是按降序排列的意思
  17. entries = topic.entry_set.order_by('-date_added')
  18. context = {'topic': topic, 'entries': entries}
  19. return render(request, 'learning_logs/topic.html', context)

date_added前边的减号是按降序排列的意思

然后写个topic.html放在一起

  1. {% extends "learning_logs/base.html" %}
  2. {% block content %}
  3. <p>Topic:{{topic}}</p>
  4. <p>Entries:</p>
  5. <ul>
  6. {% for entry in entries %}
  7. <li>
  8. <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
  9. <!--linebreaks将包含换行符的长条目转换为浏览器能够理解的格式,以免显示为一个不间断的文本块-->
  10. <p>{{ entry.text|linebreaks }}</p>
  11. </li>
  12. {% empty %}
  13. <li>There are no entries for this topic yet.</li>
  14. {% endfor %}
  15. </ul>
  16. {% endblock content %}

还得修改topics.html中的一些内容

  1. {% extends "learning_logs/base.html" %}
  2. {% block content %}
  3. <p>Topics</p>
  4. <ul>
  5. {% for topic in topics %}
  6. <li>
  7. <a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a>
  8. </li>
  9. {% empty %}
  10. <li>No topics have been added yet.</li>
  11. {% endfor %}
  12. </ul>
  13. {% endblock content %}

然后再打开页面就能看效果了,如下:

 

我在这里其实碰到了几个坑爹问题主要是自己写错了,报的错误也不准,

大家注意下第一处:

topics.html中<a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a>    这句话应该是learning_logs:topic冒号,结果我写成了learning_logs/topic

第二处:

learning_logs里的urls.py

  1. """定义learning_logs的URL模式"""
  2. from django.urls import path
  3. from . import views
  4. urlpatterns = [
  5. # 主页
  6. path('', views.index, name='index'),
  7. # 显示所有的主题
  8. path('topics/', views.topics, name='topics'),
  9. # 特定主题的详细页面
  10. path('topics/<int:topic_id>/', views.topic, name='topic'),
  11. ]

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'才发现少写了个参数

请继续看第三部分,用户部分以及相关操作和安全

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/769028
推荐阅读
相关标签
  

闽ICP备14008679号