(一)博客主页面开发

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的内容

最新文章

  1. 【转】你所不知道的Android Studio调试技巧
  2. HttpPostedFile类的使用方法
  3. 防止 JavaScript 自动插入分号
  4. JS escape、encodeURI 、encodeURIComponent 编码与解码[转]
  5. 转:sprintf与snprintf
  6. Java正則表達式语法
  7. c++ stl algorithm: std::find, std::find_if
  8. The operator == is undefined for the argument type(s) int, null
  9. OnsenUI和AngularJS配合搭建混合应用的基本步骤
  10. 2017最新PHP经典面试题目汇总(上篇)
  11. mybatis用spring的动态数据源实现读写分离
  12. 一、爬虫的基本体系和urllib的基本使用
  13. Linux云服务器安装Elasticsearch
  14. GUI学习之七——单选框QRadioButton和QButtonGroup的学习总结
  15. tensorflow开发基本步骤
  16. oracle 11g R2(静默安装)
  17. xxx征集系统项目目标文档
  18. Unix.Trojan.DDoS_XOR-1木马症状及清理办法
  19. Photoshop的混合模式
  20. [WINDOWS MOBILE | SOLUTION] 通过有线连接到 PC 后,WM设备能 PING 通网关但是不能上网

热门文章

  1. LinkedList源码解读
  2. VR全景智慧城市——商家的需求才是全景市场的核心竞争力
  3. Centos 执行shell命令返回127错误
  4. activeMQ的安装
  5. 封装TableView有可能用到的数据结构和UITableViewCell的一个继承类
  6. Webpack 开发工具与模块热替换
  7. CoordinatorLayout+沉浸式状态栏
  8. tcp_wrapper 总结
  9. python 遍历列表 list
  10. javascript所有的节点和方法