再建立幾個頁面,把搞到的資料展示出來
網頁模闆繼承:網頁有些共用的部分,這個就抽離出來,避免寫重複代碼
在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 %}" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >{{ 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 %}" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >{{ 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'才發現少寫了個參數
請繼續看第三部分,使用者部分以及相關操作和安全