9159金沙游艺场-奥门金沙游艺场-[欢迎您]

9159金沙游艺场为您呈现最新的面貌!,目前注册送体验金,欢迎您将成为影视娱乐行业新的风向标,是亚洲的优质娱乐先锋。

通用视图9159金沙游艺场

日期:2020-01-04编辑作者:服务器

django 通用视图,django视图

上一节我们介绍了django视图函数里面几个常用的函数,这节我们来看一下django为我们提供的一些通用视图吧

在最后面有我自己的示例代码,html部分太多了就不贴了

“简单”视图函数

正如名字所言,简单视图函数封装在django.views.generic.simple模块里面,主要有direct_to_template和redirect_to两个简单视图函数,主要使用范围是:没有任何的视图逻辑,仅仅需要重定向一个url

django.views.generic.simple.direct_to_template

描述:使用从url中获取的参数封装而成的在模板中名为{{ params }}的一个字典去渲染一个给定的模板

必选参数:

  • template: 正如描述所说,必须给定一个模板的全名

可选参数:

  • extra_context: 一个用来渲染模板的字典变量,默认是一个空字典
  • mimetype: 返回的文档类型,默认是DEFAULT_CONTENT_TYPE 里面的设置

    from django.views.generic.simple import direct_to_template
    
    urlpatterns = patterns('',
        (r'^foo/$',             direct_to_template, {'template': 'foo_index.html'}),
        (r'^foo/(?P<id>d+)/$', direct_to_template, {'template': 'foo_detail.html'}),
    ) 
    

第二个url里面传递的参数为{{ params.id }},对于/foo/15/这个请求来说,{{ params.id }}的值是15

django.views.generic.simple.redirect_to

描述:重定向到一个url

必选参数

  • url: 需要被重定向的url,如果为None,返回一个410错误

可选参数

  • permanent: 重定向是否永久,默认为真,如果为真,返回301,如果为假,返回302

    301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,
    
  • query_string: 是否传递获取的查询语句给重定向的url,默认为假,如果为真,该查询语句会被添加到新的url,否则丢弃。

from django.views.generic.simple import redirect_to

urlpatterns = patterns('',
    ('^bar/$', redirect_to, {'url': '%%7Ejacob.', 'permanent': False}),
)

 

需要注意的是,如果你想在url中使用%,必须使用%%来避免与python的字符串格式标记发送冲突

基于日期的通用视图

名字所言,用于显示基于日期型数据的明细页,包含在django.views.generic.date_based模块里面

django.views.generic.date_based.archive_index

描述

一个顶级的索引页按照时间显示最新的对象,除非设置allow_future为真,否则不会显示超前当前日期的对象

archive是存档的意思

必选参数

  • queryset: 一个为存档服务的对象的查询集合
  • date_field: 被查询的模型的DateField或者DateTimeField的属性名,该属性名用来判定那些对象能显示在页面上

可选参数

  • num_latest: 对象显示的个数,默认15个
  • template_name: 要被渲染的模板的全名(这可以让你可以覆盖默认的模板)
  • template_loader: 加载模板的模板加载器,默认是django.template.loader.
  • extra_context: 一个用来渲染模板的字典变量,默认是一个空字典
  • allow_empty: 一个布尔值说明是否允许返回的对象集合为空,如果为真,返回一个空页面否则促发1个404错误,默认为真
  • context_processors: 一个会被应用到模板的模板上下文处理器的列表
  • mimetype: 返回的文档类型,默认是DEFAULT_CONTENT_TYPE 里面的设置
  • allow_future:除非设置allow_future为真,否则不会显示超前当前日期的对象
  • template_object_name: 指定在模板上下文中使用的模板变量名,默认是latest

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_archive.html 

  • <model_name> 模型的全小写,例如StaffMember--> staffmember.
  • <app_label> python全路径的最右边的部分,举个例子, 你的模型的路径是 apps/blog/models.py,那么app_label就是 blog.

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量:

  • date_list: queryset.dates(date_field, 'year')[::-1].包含所有的年份

  • latest: num_latest个按date_field降序排序的对象列表,默认变量名为latest,如果指定template_object_name,则变量名变为指定值

 

django.views.generic.date_based.archive_year

描述

返回一个显示给定一个年份中所有可用月份的年度存档页面,除非设置allow_future为真,否则不会显示超前当前日期的对象

必选参数

  • year: 存档服务需要的年份(四位数字)
  • queryset:同上
  • date_field: 同上

可选参数

  • template_name:同上
  • template_loader: 同上
  • extra_context: 同上
  • allow_empty:同上
  • context_processors:同上
  • template_object_name:同上
  • make_object_list:一个布尔变量表示是否检索对象,如果为真,列表中的所有对象将被封装成一个模板变量object_list,否则 object_list为空,默认为假
  • mimetype: 同上
  • allow_future: 同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_archive_year.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • date_list: 类似上,包含所有的月份

  • year: 给定的年份(四位数字的字符串)

  • object_list: 如果make_object_list为真,列表中的所有对象将被封装成一个模板变量object_list,否则 object_list为空,默认为假,需要注意的是,如果设置了template_object_name,那么object_list中的object将被替换成template_object_list的值,例如template_object_list='foo',那么object_list变为foo_list

django.views.generic.date_based.archive_month

描述

返回一个显示给定月份的所有对象,除非设置allow_future为真,否则不会显示超前当前日期的对象

必选参数

  • year:同上
  • month: 存档服务所需的月份,格式见month_format参数
  • queryset: 同上
  • date_field: 同上

可选参数

  • month_format: 一个用来格式化月份的字符串,要求这个格式能被python的strftime()方法接受,默认是'%b',表示月份的三个字母的缩写,如果想该用数字,请使用'%m'
  • template_name: 同上
  • template_loader: 同上
  • extra_context: 同上
  • allow_empty: 同上
  • context_processors: 同上
  • template_object_name: 同上
  • mimetype: 同上
  • allow_future:同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_archive_month.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • date_list: 类似上,包含所有的天数
  • month: 一个datetime.date 对象代表给定的月份
  • next_month: 一个 datetime.date 对象代表下个月的第一天,如果下个月在今天之后,会被设为None
  • previous_month: 一个datetime.date 对象代表上个月的第一天,不想next_month,这永远不会被设为None
  • object_list: 同上

django.views.generic.date_based.archive_week

9159金沙游艺场,描述

返回一个显示给定星期的所有对象,除非设置allow_future为真,否则不会显示超前当前日期的对象

必选参数

  • year:同上
  • week: 一年中的某个星期(字符串),每个星期从周日开始,即是第几个周日对应的那一天
  • queryset: 同上
  • date_field: 同上

可选参数

  • template_name: 同上
  • template_loader: 同上
  • extra_context: 同上
  • allow_empty: 同上
  • context_processors: 同上
  • template_object_name: 同上
  • mimetype: 同上
  • allow_future:同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_archive_week.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • week: 一个 datetime.date 对象代表该星期的第一天(即周日)
  • object_list: 同上

 

django.views.generic.date_based.archive_day

描述

返回一个显示给定日期的所有对象,除非设置allow_future为真,否则超前当前日期的请求都会引发404的错误(不管那天是否存在对象)

必选参数

  • year: 同上
  • month: 同上
  • day: 同上
  • queryset: 同上
  • date_field: 同上

可选参数

  • month_format:同上
  • day_format: 类似month_format,不过对于日期来说,默认的格式是%d(01-31的十进制数字)
  • template_name: 同上
  • template_loader: 同上
  • extra_context: 同上
  • allow_empty: 同上
  • context_processors: 同上
  • template_object_name: 同上
  • mimetype: 同上
  • allow_future:同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_archive_day.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • day: 一个 datetime.date 对象代表给定的日期

  •  next_day: 一个datetime.date 代表下一天,如果下一天在今天之后,则被设为None

  •  previous_day: 一个 datetime.date 对象代表前一天,这永远不会设为None

  • object_list: 同上

django.views.generic.date_based.archive_today

描述

返回今天的所有对象的存档页面,除了没有年月日的指定外,基本和archive_day一样

django.views.generic.date_based.object_detail

描述

返回一个显示特定对象的页面,除非设置allow_future为真,否则若该对象超前当前日期会引发404的错误

必选参数

  • year: 同上
  • month: 同上
  • day: 同上
  • queryset: 同上
  • date_field: 同上
  •  object_id 和 (slug and slug_field) 至少要提供一个,如果你提供object_id, 那他必须是主键属性的值

可选参数

  • month_format:同上
  • day_format: 类似month_format,不过对于日期来说,默认的格式是%d(01-31的十进制数字)
  • template_name: 同上
  • template_name_field: 这大概是一个拍脑袋的想法,这个参数给定的是,对象中那些可以用来命名模板的属性名,假如说你的对象有一个域'the_template'包含的字符串是'foo.html',那么你可以指定template_name_field是the_template,那么通用视图将会使用这个值来寻找使用模板foo.html
  • template_loader: 同上
  • extra_context: 同上
  • allow_empty: 同上
  • context_processors: 同上
  • template_object_name: 同上
  • mimetype: 同上
  • allow_future:同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_detail.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • object:类似上面的object_list

 列表/详细通用视图

这个通用视图和基于日期的很像,位于django.views.generic.list_detail模块,不过基于日期的通用视图只有简单的两个页面:对象的列表和特定对象的详细页面

django.views.generic.list_detail.object_list

描述

返回一个显示一个列表的对象的页面

必选参数

  • queryset: 同上

可选参数

  • paginate_by: 每页显示多少个对象
  • page: 当前的页码,是一个整数或者字符串'last'
  • template_name: 同上
  • template_name_field: 这大概是一个拍脑袋的想法,这个参数给定的是,对象中那些可以用来命名模板的属性名,假如说你的对象有一个域'the_template'包含的字符串是'foo.html',那么你可以指定template_name_field是the_template,那么通用视图将会使用这个值来寻找使用模板foo.html
  • template_loader: 同上
  • extra_context: 同上
  • allow_empty: 同上
  • context_processors: 同上
  • template_object_name: 同上
  • mimetype: 同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_archive_list.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • object_list:同上
  • ``is_paginated: 一个布尔型的变量指明当前是否分页了,当对象个数少于上面给出的paginate_by时,被设为False,否则为真

 如果is_paginated为真的话,下面两个变量在模板中将可用

  • paginator: An instance of django.core.paginator.Paginator.
  • page_obj: An instance of django.core.paginator.Page.

 分页提示

当使用了paginated_by是,django会将结果分页,所以我们在一个在url中使用page number

urlconf:(r'^objects/page(?P<page>[0-9]+)/$', 'object_list', dict(info_dict))
url:/objects/?page=3

需要注意的是,page是从1开始,而不是从零开始的,如果page不合法,将促发404错误

亦可以使用last,如

/objects/?page=last

django.views.generic.list_detail.object_detail

描述

返回一个显示特定对象的页面

必选参数

  • queryset: 一个包含该对象的查询集
  •  object_id 和 (slug and slug_field) 至少要提供一个,如果你提供object_id, 那他必须是主键属性的值

可选参数

  • template_name: 同上
  • template_name_field: 这大概是一个拍脑袋的想法,这个参数给定的是,对象中那些可以用来命名模板的属性名,假如说你的对象有一个域'the_template'包含的字符串是'foo.html',那么你可以指定template_name_field是the_template,那么通用视图将会使用这个值来寻找使用模板foo.html
  • template_loader: 同上
  • extra_context: 同上
  • allow_empty: 同上
  • context_processors: 同上
  • template_object_name: 同上
  • mimetype: 同上
  • allow_future:同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_detail.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • object:类似上面的object_list

 生成/更新/删除通用视图

django.views.generic.create_update模块封装了生成/更新/删除对象的一些函数

django.views.generic.create_update.create_object

描述

描述返回一个显示生成对象的表单页面,提交表单后显示提示错误(如果有的话)然后保存对象

必选参数

  •  form_class和model至少要提供一个,如果你提供form_class,那必须是django.forms.ModelForm 的子类;如果提供model,必须包含标准的ModelForm

可选参数

  • post_save_redirect: 保存对象后跳转的url,默认是该对象的object.get_absolute_url()方法

  • login_required: 一个布尔值决定是否需要登录才能看到这个页面并保存修改,默认是假;如果为真,若不登陆,将转到登录页面(当然了,这个适合django的认证系统绑定的)

  • template_name: 同上
  • template_loader: 同上
  • extra_context: 同上
  • context_processors: 同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_form.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • form:一个django.forms.ModelForm实例

django.views.generic.create_update.update_object

描述

描述返回一个显示编辑对象的表单页面,提交表单后显示提示错误(如果有的话)然后保存对象

必选参数

  •  form_class和model至少要提供一个,如果你提供form_class,那必须是django.forms.ModelForm 的子类;如果提供model,必须包含标准的ModelForm
  •  object_id 和 (slug and slug_field) 至少要提供一个,如果你提供object_id, 那他必须是主键属性的值

可选参数

  • post_save_redirect: 保存对象后跳转的url,默认是该对象的object.get_absolute_url()方法

  • login_required: 一个布尔值决定是否需要登录才能看到这个页面并保存修改,默认是假;如果为真,若不登陆,将转到登录页面(当然了,这个适合django的认证系统绑定的)

  • template_name: 同上
  • template_loader: 同上
  • extra_context: 同上
  • context_processors: 同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_form.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • form:一个django.forms.ModelForm实例
  • object: 同上

django.views.generic.create_update.delete_object

描述

一个视图,展示一个信息页面然后删除这个对象;仅当request method是post的时候,对象才会被删除;若是通过get请求该视图函数,将展示一个post到相同url的表单页面(信息页面)

必选参数

  •  form_class和model至少要提供一个,如果你提供form_class,那必须是django.forms.ModelForm 的子类;如果提供model,必须包含标准的ModelForm
  • post_delete_redirect: 删除后重定向的url

可选参数

  • post_save_redirect: 保存对象后跳转的url,默认是该对象的object.get_absolute_url()方法

  • login_required: 一个布尔值决定是否需要登录才能看到这个页面并保存修改,默认是假;如果为真,若不登陆,将转到登录页面(当然了,这个适合django的认证系统绑定的)

  • template_name: 同上
  • template_loader: 同上
  • extra_context: 同上
  • context_processors: 同上

Template name:

如果没有给定template_name, 将会使用 默认模板<app_label>/<model_name>_confirm_delete.html 

Template context:

除了可选参数的extra_context外, 模板上下文还包含以下变量

  • object: 同上

下面我们来看一些例子吧

models.py

from django.db import models
from django.contrib import admin
from sysu.ThumbnailImageField import ThumbnailImageField
# Create your models here.
class Item(models.Model):
    """docstring for Item"""
    name = models.CharField(max_length=250)
    description = models.TextField()

    class Meta:
        ordering =['name']

    def __unicode__(self):
        return self.name

    @models.permalink
    def get_absolute_url(self):
        return ('item_detail',None,{'object_id':self.id})

class Photo(models.Model):
    """docstring for Photo"""
    item = models.ForeignKey(Item)
    title = models.CharField(max_length=100)
    image = ThumbnailImageField(upload_to='photos')
    caption = models.CharField(max_length=250)

    class Meta:
        ordering = ['title']

    def __unicode__(self):
        return self.title

    @models.permalink
    def get_absolute_url(self):
        return ('photo_detail',None,{'object_id':self.id})

class PhotoInline(admin.StackedInline):
    """docstring for PhotoInline"""
    model = Photo
class ItemAdmin(admin.ModelAdmin):
    """docstring for ItemAdmin"""
    inlines = [PhotoInline]
admin.site.register(Item,ItemAdmin)
admin.site.register(Photo)

import datetime
from django.db import models
from django.db.models import permalink
from django.contrib.auth.models import User
from django.contrib import admin
from markdown import markdown
VIEWABLES_STATUS = [3,4]
class ViewableManager(models.Manager):
    """docstring for ViewableManager"""
    def get_query_set(self):
        default_queryset = super(ViewableManager, self).get_query_set()
        return default_queryset.filter(status__in=VIEWABLES_STATUS)

class Category(models.Model):
    """docstring for Category"""
    label = models.CharField(blank=True,max_length=50)
    slug = models.SlugField()
    class Meta:
        verbose_name_plural = "categories"
    def __unicode__(self):
        return self.label
class CategoryAdmin(admin.ModelAdmin):
    """docstring for CategoryAdmin"""
    prepopulated_fields = {'slug':('label',)
    }
admin.site.register(Category,CategoryAdmin)        

class Stroy(models.Model):
    """docstring for Stroy"""
    STATUS_CHOICES = (
        (1,"Needs Edit"),
        (2,"Needs Approval"),
        (3,"Published"),
        (4,"Archived"),
    )
    title = models.CharField(max_length=100)
    slug = models.SlugField()
    category = models.ForeignKey(Category)
    markdown_content = models.TextField()
    html_content = models.TextField(editable=False)
    owner = models.ForeignKey(User)
    status = models.IntegerField(choices=STATUS_CHOICES,default=1)
    created = models.DateTimeField(default=datetime.datetime.now())
    modified = models.DateTimeField(default=datetime.datetime.now())
    class Meta:
        ordering = ['modified']
        verbose_name_plural = "stories"
    def save(self):
        self.html_content = markdown(self.html_content)
        self.modified = datetime.datetime.now()
        super(Stroy, self).save()
    admin_objects = models.Manager()
    objects = ViewableManager()
    @permalink
    def get_absolute_url(self):
        return ("cms-story",None,{'slug':self.slug})
class StroyAdmin(admin.ModelAdmin):
    """docstring for StroyAdmin"""
    list_display = ('title','owner','status','created','modified')
    search_fields = ('title','content')
    list_filter = ('status','owner','created','modified')
    prepopulated_fields = {'slug':('title',)
            }
    fieldsets = [
        ("Title",{"fields":("title","slug","category")}),
        ("Content",{"fields":("markdown_content","owner")}),
        ("Status",{"classes":("monospace",),"fields":("status","created","modified")})
    ]
admin.site.register(Stroy,StroyAdmin)

 

ThumbnailImageField.py

# ThumbnailImageField.py
from django.db.models.fields.files import ImageField,ImageFieldFile
from PIL import Image
import os
def _add_thumb(s):
    parts = s.split(".")
    parts.insert(-1,"thumb")
    if parts[-1].lower() not in ['jpeg','jpg']:
        parts[-1]='jpg'
    return ".".join(parts)
class ThumbnailImageFieldFile(ImageFieldFile):
    def _get_thumb_path(self):
        return _add_thumb(self.path)
    thumb_path = property(_get_thumb_path)
    def _get_thumb_url(self):
        return _add_thumb(self.url)
    thumb_url = property(_get_thumb_url)

    def save(self,name,content,save=True):
        super(ThumbnailImageFieldFile, self).save(name,content,save)
        img = Image.open(self.path)
        img.thumbnail(
            (self.field.thumb_width,self.field.thumb_height),
            Image.ANTIALIAS
        )
        img.save(self.thumb_path,'JPEG')
    def delete(self,save=True):
        if os.path.exists(self.thumb_path):
            os.remove(self.thumb_path)
        super(ThumbnailImageFieldFile, self).delete(save)


class ThumbnailImageField(ImageField):
    """docstring for ThumbnailImageField"""
    attr_class = ThumbnailImageFieldFile
    def __init__(self,thumb_width=128,thumb_height=128,*args,**kwargs):
        self.thumb_width = thumb_width
        self.thumb_height = thumb_height
        super(ThumbnailImageField, self).__init__(*args,**kwargs)

 

urls.py

from django.conf.urls import patterns, include, url
from sysu.models import Item,Photo,Stroy
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

info_dict = {'queryset':Stroy.objects.all()}

urlpatterns =patterns('django.views.generic',
    url(r'^cms/search/$',search,name="cms-search"),
    url(r'^cms/(?P<slug>[-w]+)/$', 'list_detail.object_detail',
        kwargs={
            'queryset':Stroy.objects.all(),
            'template_name':'story_detail.html',
            'template_object_name':'story'
            },
            name="cms-story"
        ),
    url(r'^cms/$', 'list_detail.object_list',
        kwargs={
            'queryset':Stroy.objects.all(),
            'template_name':'story_list.html',
            'template_object_name':'story'
            },
            name="cms-home"
        ),
    url(r'^cms/category/(?P<slug>[-w]+)/$', category,name="cms-category"),

    # url(r'^gallery/$', 'simple.direct_to_template',
    #     kwargs={
    #         'template':'in.html',
    #         'extra_context':{'item_list':lambda:Item.objects.all()}
    #     },
    #     name='index'
    #     ),
    # url(r'^gallery/items/$', 'list_detail.object_list',
    #     kwargs={
    #         'queryset':Item.objects.all(),
    #         'template_name':'item_list.html',
    #         'allow_empty':True },
    #         name='item_list'
    #     ),
    # url(r'^items/(?P<object_id>d+)/$', 'list_detail.object_detail',
    #     kwargs={
    #         'queryset':Item.objects.all(),
    #         'template_name':'items_detail.html'
    #         },
    #         name='item_detail'
    #     ),
    # url(r'^gallery/photos/(?P<object_id>d+)$', 'list_detail.object_detail',
    #     kwargs={
    #         'queryset':Photo.objects.all(),
    #         'template_name':'photos_detail.html'
    #         },
    #         name='photo_detail'
    #     ),
    # url(r'pages/', include('django.contrib.flatpages.urls')),
)

 

都是以前写过的代码,仅供大家参考,有什么大家可以随时交流

 

通用视图,django视图 上一节我们介绍了django视图函数里面几个常用的函数,这节我们来看一下django为我们提供的一些通用视图吧 在最...

本文由9159金沙游艺场-奥门金沙游艺场-[欢迎您]发布于服务器,转载请注明出处:通用视图9159金沙游艺场

关键词:

CSS完结的粗略折叠张开多级菜单功用

JS+CSS达成的简洁明了折叠打开多级菜单效率,jscss折叠菜单 正文实例陈说了JS+CSS达成的可折叠展开多级菜单作用。分...

详细>>

诺玛lize.css的应用(【9159金沙游艺场】重新设置

如何使用 normalize.css 首先,安装或从Github下载Normalize.css,接下来有两种主要途径去使用它。 策略一:将 normalize.css...

详细>>

python学习笔记五9159金沙游艺场

python学习笔记五:模块和包,python学习笔记模块 二、包:按目录名团伙的模块 1、创设一个名叫包名字的文件夹 2、在...

详细>>

javascript判断网页是关闭还是刷新

javascript判断网页是关闭还是刷新,javascript判断 原理就是通过离开页面行为时间onunload触发时间去检测此时的浏览器的...

详细>>