python web小项目实践 用的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'才发现少写了个参数

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值