一.结合模型,视图和模板

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之旅(四)模型,模板和视图的更多相关文章

  1. Django 笔记(四)模板标签 ~ 自定义过滤器

    模板标签: 标签在渲染的过程中提供任意的逻辑 语法: 由{% ... %} 和 {% end... %} 常用标签: with:类似取别名 模版继承: Django模版引擎中最强大也是最复杂的部分就是 ...

  2. 潭州课堂25班:Ph201805201 django框架 第四课 模板常用标签,模板继承与引用,自定义过渡器 (课堂笔记)

    if 语句 判断传入的 name 值 建好这些文件后,对 url 进行配置 在浏览器中访问 for 循环 页面跳转: 通过  name 跳转时要在 urls 文件中为该 path 设置 name 带参 ...

  3. The Django Book - 第四章 模板2

    模板(相应)使用的几种方式: 1.使用HttpResponse返回字符串HTML from django.http import HttpResponse def current_datetime(r ...

  4. The Django Book - 第四章 模板

    使用模板的最基本方式:1.根据原始模板代码字符串创建一个Template对象2. 使用字典创建一套Context变量3. 调用Template对象的render方法,传入Context变量参数 In ...

  5. 我的django之旅(三)数据库和模型

    我的django之旅(三)模型和数据库 标签(空格分隔):模型 数据库 ORM 1.django ORM django内置了一套完整的解决方案,其中就包括他自己的ORM.可惜没有使用SQLAlchem ...

  6. 我的django之旅(二)模板和静态文件

    我的django之旅(二)模板和静态文件 标签(空格分隔): django 1.为什么要使用模板 在上一篇博文中,提到了HttpReponse,但是HttpReponse只能传送字符串,如果要构建一个 ...

  7. day 68 Django基础四之模板系统

      Django基础四之模板系统   本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关 ...

  8. day 54 Django基础四之模板系统

    Django基础四之模板系统   本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关于模 ...

  9. Django基础之MTV模型

    一.Django基础 一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型(Model).视图(View)和控制器(Control ...

  10. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

随机推荐

  1. css技巧之如何实现ul li边框重合

    提到边框重合,我们不妨打开淘宝首页浏览主体分类内容板块瞧瞧---亲,你看到了,正是这个,边框重合.其实我们不难发现,这个效果并不难,只是我们没有真正的动手做过而已,所以不知道怎么做,那么下面就是一个很 ...

  2. 教训 Mac下装windows系统 失败后 磁盘空间丢失

    本来Mac上装的是win10 最近老提示快过期了 想到月底就要停止免费更新了 决定装一下win8 然后升级到win10 因为之前有过装win10的经验 所以很轻松 进入Mac 先到bootcamp 取 ...

  3. android开发基本流程

    ------->Directory Structure Manifest.xml + activity/layout + R ------->Dalvik Debug Monitor Se ...

  4. 外部函数接口 LibFFI

    “FFI” 的全名是 Foreign Function Interface,通常指的是允许以一种语言编写的代码调用另一种语言的代码.而 “Libffi” 库只提供了最底层的.与架构相关的.完整的”FF ...

  5. MySQL常用Json函数

    官方文档:JSON Functions Name Description JSON_APPEND() Append data to JSON document JSON_ARRAY() Create ...

  6. TaintDroid:智能手机监控实时隐私信息流跟踪系统(四)

    6      应用程序研究 款流行的应用程序是怎么使用用户敏感数据的.选取的应用程序可以根据相应的权限通过Internet获得各种各样的用户数据.我们研究发现三分之二的这些数据暴露了用户详细的地理位置 ...

  7. auto space advisor

    <pre name="code" class="sql">首先:oracle有自动Job,进行shrink space SQL> select ...

  8. Xmind 快捷键

    Xmind 快捷键 快捷键(Windows) 快捷键(Mac) 描述 Ctrl+N Command+N 建立新工作簿 Ctrl+O Command+O 开启工作簿 Ctrl+S Command+S 储 ...

  9. [转]ubuntu14.04安装好用的google拼音输入法

    原文网址:http://jingyan.baidu.com/article/219f4bf7d4a183de442d38f2.html 装了ubuntu14.04后感觉自带的拼音输入法不好用的有没有, ...

  10. Android App Widget的简单使用

    App Widget是一些桌面的小插件,比如说天气和某些音乐播放应用,放到桌面去的那部分: 例如: 实现步骤及代码如下: (1)首先,在AndroidManifest.xml中声明一个App Widg ...