Django-4-创建其它网页

1、使用模板继承(方便管理和修改等操作)

父模板:创建/learning_log/learning_logs/templates/learning_logs/base.html

<p>
	<a href="{% url 'learning_logs:index'%}">Leaning Log</a>
</p>

{% block content %}{% endblock content %}

使用了模板标签{%%},使其中间可以使用命名空间learning_logs,index是该命名空间的一个URL模式;

使用了一对块标签,该块名为content,是一个占位符,包含信息可由子模板指定;

子模板:(模板每个层级通常为缩进两个空格)

重写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 %>

2、显示所有主题的页面

URL模式:修改/learning_logs/urls.py定义显示所有主题页面的URL http://localhost:8080/topics/

urlpatterns = [
	# 主页
	url(r'^$', views.index, name = 'index'),
	
	#显示所有主题
	url(r'^topics/$', views.topics, name = 'topics'),
]

视图:修改/learning_log/learning_logs/views.py,函数topics()需要将数据库部分数据发送给模板;

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_py('date_added')
	context = {'topics':topics}
	return render(request, 'learning_logs/topics.html', context)

模板:创建/learning_log/learning_logs/templates/learning_logs/topics.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中添加链接

<a href = "{% url 'learning_logs:topics'%}">Topics</a>

3、显示特定主题页面

URL模式:(使用主题id属性)修改/learning_logs/urls.py

"""定义learning_logs的URL模式"""

from django.conf.urls import url
from . import views

app_name = 'learning_logs'

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'),
]

解读  r'^topics/(?P<topic_id>\d+)/$'  正则表达式:r让python将接下来的字符串视为原始字符串,引号告诉python该正则表达式始于何处、终于何处,脱字符^让python查看字符串的开头,$查看字符串的末尾;/(?P<topic_id>\d+)/与包含在两个斜杠内的整数匹配并将该整数存储在topic_id实参中,两边括号()捕获URL的值,?P<topic_id>将匹配的值存储到topic_id,表达式\d+与包含在两个斜杠内的任何数字都匹配。

视图:(函数topic从数据库获取指定主题及相关的条目)修改/learning_log/learning_logs/views.py

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)

模板:创建/learning_log/learning_logs/templates/learning_logs/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>
        <p>{{entry.text|linebreaks}}</p>
      </li>
    {% empty %}
      <li>There are no entries for this topic yet.</li>
    {% endfor %}
  </ul>
{% endblock content %}

Django中“|”表示模板过滤器:过滤器date格式化显示时间戳;过滤器linebreaks将包含换行符的长条目转换为浏览器能够理解的格式。

将显示所有主题的页面中的每个主题都设置为链接:修改/learning_log/learning_logs/templates/learning_logs/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}}</li>
    {% empty %}
      <li>No topics have been added yet.</li>
    {% endfor %}
  </ul>

{% endblock content %}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值