Django学习(五)---模板扩展,开发博客页面
2024-10-16 05:22:24
(一)博客主页面开发
1.模板中可使用for循环,语法格式为:
{% for xs in xxs %}
HTML语句
{% endfor %}
2.更改app下的views.py, 获取后台models Article类下的数据列表集合
思路:1)取出数据库中所有文章对象 2)将文章对象们打包成列表返回到前端
from django.shortcuts import render from . import models # Create your views here. def index(request): articles = models.Article.objects.all() return render(request,'blog/index.html',{'articles':articles})
3.修改html文件:
<!DOCTYPE html> <html> <head> <title>第一个Template</title> </head> <body> <h1><a href="">添加新文章</a></h1> {% for article in articles %} <a href="">{{ article.title }}</a> <br/> {% endfor %} </body> </html>
效果如下:
(二)博客文章页面开发
1.在app下views.py中添加响应函数page(对应文章内容页面)
2.点击博客主页面的文章链接会跳转到文章内容页面,实际上传递了点击的文章的唯一标识(主键 也就是django自己添加的id)
3.因此,在page方法里面添加参数article_id来传递主键id
4.获取文章对象,渲染到HTML
views.py如下:
from django.shortcuts import render from django.http import HttpResponse from . import models # Create your views here. def index(request): articles = models.Article.objects.all() return render(request,'blog/index.html',{'articles':articles}) def page(request,article_id): article = models.Article.objects.get(pk=article_id) return render(request,'blog/page.html',{'article':article})
5.创建templates下的page.html(文章内容页面)
<!DOCTYPE html> <html> <head> <title>my page</title> </head> <body> <h1>{{ article.title }}</h1> <br/> <h3>{{ article.content }}</h3> <br/><br/> <a href="#">修改文章</a> </body> </html>
6.app中的urls.py中配置如下:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^index/$',views.index), url(r'article/(?P<article_id>[0-9]+)/$',views.page), ]
关键:URL参数传递
每个响应函数对应一个URL
上面的page响应函数多了一个参数,要在URL中体现出来
不同文章对应不同id localhost:8000/blog/article/1 ....article/2 对应不同文章
(?P<article_id>[0-9]+) 正则表达式匹配到的数字以article_id作为组名去匹配 组名必须和响应函数中的参数名保持一致。
使用(?P<>\d+)的形式捕获值给<>中的参数,比如(?P<article_id>\d+),当访问/index/article/1时,会将1捕获给article_id,这个值会传到views.py的page函数中的参数article_id,这样就可以判断展示哪个article的内容
最新文章
- 【转】你所不知道的Android Studio调试技巧
- HttpPostedFile类的使用方法
- 防止 JavaScript 自动插入分号
- JS escape、encodeURI 、encodeURIComponent 编码与解码[转]
- 转:sprintf与snprintf
- Java正則表達式语法
- c++ stl algorithm: std::find, std::find_if
- The operator == is undefined for the argument type(s) int, null
- OnsenUI和AngularJS配合搭建混合应用的基本步骤
- 2017最新PHP经典面试题目汇总(上篇)
- mybatis用spring的动态数据源实现读写分离
- 一、爬虫的基本体系和urllib的基本使用
- Linux云服务器安装Elasticsearch
- GUI学习之七——单选框QRadioButton和QButtonGroup的学习总结
- tensorflow开发基本步骤
- oracle 11g R2(静默安装)
- xxx征集系统项目目标文档
- Unix.Trojan.DDoS_XOR-1木马症状及清理办法
- Photoshop的混合模式
- [WINDOWS MOBILE | SOLUTION] 通过有线连接到 PC 后,WM设备能 PING 通网关但是不能上网