You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
git-test/blog/views.py

128 lines
3.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from django.shortcuts import render
# Create your views here.
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, FormView
from django.views.generic.dates import YearArchiveView, MonthArchiveView
from blog.models import Article, Category, Tag
from django.conf import settings
import markdown
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.core.exceptions import ObjectDoesNotExist
class ArticleListView(ListView):
# template_name属性用于指定使用哪个模板进行渲染
template_name = 'blog/index.html'
# context_object_name属性用于给上下文变量取名在模板中使用该名字
context_object_name = 'article_list'
# 页面类型,分类目录或标签列表等
page_type = ''
class IndexView(ArticleListView):
def get_queryset(self):
article_list = Article.objects.filter(status='p')
# for article in article_list:
# article.body = article.body[0:settings.ARTICLE_SUB_LENGTH]
# # article.body = markdown2.markdown(article.body)
return article_list
class ArticleDetailView(DetailView):
template_name = 'blog/articledetail.html'
model = Article
pk_url_kwarg = 'article_id'
context_object_name = "article"
def get_object(self):
obj = super(ArticleDetailView, self).get_object()
obj.viewed()
# obj.body = markdown2.markdown(obj.body)
return obj
def get_context_data(self, **kwargs):
articleid = int(self.kwargs['article_id'])
def get_article(id):
try:
return Article.objects.get(pk=id)
except ObjectDoesNotExist:
return None
next_article = get_article(articleid + 1)
prev_article = get_article(articleid - 1)
kwargs['next_article'] = next_article
kwargs['prev_article'] = prev_article
return super(ArticleDetailView, self).get_context_data(**kwargs)
class CategoryDetailView(ArticleListView):
# template_name = 'index.html'
# context_object_name = 'article_list'
# pk_url_kwarg = 'article_name'
page_type = "分类目录归档"
def get_queryset(self):
categoryname = self.kwargs['category_name']
article_list = Article.objects.filter(category__name=categoryname, status='p')
return article_list
def get_context_data(self, **kwargs):
categoryname = self.kwargs['category_name']
kwargs['page_type'] = CategoryDetailView.page_type
kwargs['tag_name'] = categoryname
return super(CategoryDetailView, self).get_context_data(**kwargs)
class AuthorDetailView(ArticleListView):
page_type = '作者文章归档'
def get_queryset(self):
author_name = self.kwargs['author_name']
article_list = Article.objects.filter(author__username=author_name)
return article_list
def get_context_data(self, **kwargs):
author_name = self.kwargs['author_name']
kwargs['page_type'] = AuthorDetailView.page_type
kwargs['tag_name'] = author_name
return super(AuthorDetailView, self).get_context_data(**kwargs)
class TagListView(ListView):
template_name = ''
context_object_name = 'tag_list'
def get_queryset(self):
tags_list = []
tags = Tag.objects.all()
for t in tags:
t.article_set.count()
class TagDetailView(ArticleListView):
page_type = '分类标签归档'
def get_queryset(self):
tag_name = self.kwargs['tag_name']
article_list = Article.objects.filter(tags__name=tag_name)
return article_list
def get_context_data(self, **kwargs):
tag_name = self.kwargs['tag_name']
kwargs['page_type'] = TagDetailView.page_type
kwargs['tag_name'] = tag_name
return super(TagDetailView, self).get_context_data(**kwargs)