我的django之旅(四)模型,模板和视图
一.结合模型,视图和模板
1.数据和模板结合
基本工作流程:
(1)在views.py文件中导入我们创建的models
(2)在视图函数中使用models,进行crud操作。
(3)将取得的数据存入template的上下文
(4)在template中给我们的数据找好位置,渲染它们。
2.初探模板语言
{% if %}
{% endif %}
if语句,和普通使用的不同在于必须用{% %} 包裹,而且当结束时有一个{% endif %}
{% for %}
{% endfor %}
for语句同理亦然。
{{data}},在两层大括号的包裹中,存放的是数据,可以通过if,for等分支,循环语句,将list中的数据取出来。
3.如何设计URL
我们的rango应用下有许多的页面,url的名称设计也是一个颇为重要的任务。如果url过于模糊,例如/rango/1或者/rango/2可能连我们自己都会不知所云。如果在url上添加页面的相关信息就好的多了,比如/rango/python,这是一个和python相关的页面。
并且python是从数据库中取出的相关字段。那么一个字段有空格又怎么办呢?比如
python framework。这就需要用到slug字段了。它会将python framework转换成python-framework.
3.Slug
首先引入slugify函数
from django.template.default.defaultfilters import slugify
在model中添加slug字段
slug=models.SlugField(unique=True)
重写save函数
ef save(*args,**kwargs):
self.slug=slugify(self.name)
super(<model-name>,self).save(*args,**kwargs)
4.注意事项
由于我们设置的slug是一个必须的(unique)值,如果要对model的改动迁移,会报如下的错误:
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py
解决方案:选择1,输入' '即可,这表示将字段默认值设置为空字符串,但是接下来的步骤还是会报错
django.db.utils.IntegrityError: UNIQUE constraint failed: rango_category__new.slug
解决方案详细:http://stackoverflow.com/questions/29373887/django-db-utils-integrityerror-unique-constraint-failed-rango-category-new-sl
给slug字段添加一个默认值uuid,还是失败
真-解决方案:
http://www.cnblogs.com/FARAMIR/p/4632355.html
由此可见,教程也不是完全正确,必须要不断的折腾才行。
PS:mysql就是比sqlite好用。
5.详细页面
我们的首页只有分类,点击分类后才进入详细页面。详细页面显示的就是page的信息,所以要引入page的model
要进入详细页面,势必要设置url
url设置如下:
url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category')
?P<category_name_slug>代表将这个值作为参数传入到category这个视图函数中,后面的正则表达式[\w\-]+代表匹配slug值
在视图函数中要接收这个值的话就要新增参数
def category(request,category_name_slug)
因为已经设置slug值为unique,所以通过slug值我们可以找到唯一的Category对象,通过这个对象再找到page对象们。将信息存入context_dict{},在模版中渲染数据即可
我的django之旅(四)模型,模板和视图的更多相关文章
- Django 笔记(四)模板标签 ~ 自定义过滤器
模板标签: 标签在渲染的过程中提供任意的逻辑 语法: 由{% ... %} 和 {% end... %} 常用标签: with:类似取别名 模版继承: Django模版引擎中最强大也是最复杂的部分就是 ...
- 潭州课堂25班:Ph201805201 django框架 第四课 模板常用标签,模板继承与引用,自定义过渡器 (课堂笔记)
if 语句 判断传入的 name 值 建好这些文件后,对 url 进行配置 在浏览器中访问 for 循环 页面跳转: 通过 name 跳转时要在 urls 文件中为该 path 设置 name 带参 ...
- The Django Book - 第四章 模板2
模板(相应)使用的几种方式: 1.使用HttpResponse返回字符串HTML from django.http import HttpResponse def current_datetime(r ...
- The Django Book - 第四章 模板
使用模板的最基本方式:1.根据原始模板代码字符串创建一个Template对象2. 使用字典创建一套Context变量3. 调用Template对象的render方法,传入Context变量参数 In ...
- 我的django之旅(三)数据库和模型
我的django之旅(三)模型和数据库 标签(空格分隔):模型 数据库 ORM 1.django ORM django内置了一套完整的解决方案,其中就包括他自己的ORM.可惜没有使用SQLAlchem ...
- 我的django之旅(二)模板和静态文件
我的django之旅(二)模板和静态文件 标签(空格分隔): django 1.为什么要使用模板 在上一篇博文中,提到了HttpReponse,但是HttpReponse只能传送字符串,如果要构建一个 ...
- day 68 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关 ...
- day 54 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模 ...
- Django基础之MTV模型
一.Django基础 一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型(Model).视图(View)和控制器(Control ...
- Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录
一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...
随机推荐
- HTML&CSS基础学习笔记1-简单网页中有哪些标签?
一个简单网页中有哪些HTML标签? 平时我们看到的网页,都是由HTML的标签来组成的.HTML标签非常多,我们先来认识一部分. 1. <html></html>称为根标签,所有 ...
- Function 语意学
C++支持三种类型的member functions: static.nonstatic和virtual,每一种类型调用方式都不相同. 一 nostatic members functions 1 调 ...
- Android手机SSH Client客户端推荐JuiceSSH
Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...
- 编译内核时出错:/bin/sh: 1: lzop: not found
http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/71477.aspx 在上面链接中,发现时缺少了 lzop 工 ...
- OpenUrl 的跨平台实现
OpenUrl 是 iOS 中 UIApplication 提供的一个函数,用于调用其它程序.实际上各个平台都有自己的实现,这里提供一个直接封装完的跨平台版本给大家. Delphi ...
- ECMAScript 5/6/7兼容性速查表
http://kangax.github.io/compat-table/es5/ 秒查ECMAScript在各大浏览器的兼容性,点击右上角按钮可以“在5/6/7/非标”之间切换.做JavaScrip ...
- 转:linux shell 数组建立及使用技巧
linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...
- C#使用.net.mail配置163邮箱报错:不允许使用邮箱名称。 服务器响应为:authentication is required,smtp9,DcCowABHK4UYE11W2k6fAQ--.52196S2 1448940312
client.UseDefaultCredentials = true; 要放在 client.Credentials = new NetworkCredential("用户名", ...
- AS3读取加密XML
首先要确定xml使用了哪些加密方式,这样在As3中就反过来解密. 我加密xml的方式是先将xml文件打包为一个压缩文件,然后将压缩文件进行RC4加密,最后用base64将加密过的压缩包转为base64 ...
- SPOJ375.QTREE树链剖分
题意:一个树,a b c 代表a--b边的权值为c.CHANGE x y 把输入的第x条边的权值改为y,QUERY x y 查询x--y路径上边的权值的最大值. 第一次写树链剖分,其实树链剖分只能说 ...