zoukankan      html  css  js  c++  java
  • 我的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{},在模版中渲染数据即可

  • 相关阅读:
    JSTL EL 详解
    什么是JavaBean
    easy.jsp出现According to TLD or attribute directive in tag file, attribute value does not accept any expressions
    搭建sendmail
    系统运维工程师之路
    centos7 搭建安装zabbix3.0服务端实例(一)
    单例模式
    cassandra-压缩策略
    cassandra的坑-windows平台压缩策略
    Quick Sort
  • 原文地址:https://www.cnblogs.com/liaozhichao/p/4920284.html
Copyright © 2011-2022 走看看