Skip to content

Commit f80faa3

Browse files
committed
部分功能优化,修复文章内页上篇下篇未显示bug
1 parent 3115f0a commit f80faa3

File tree

9 files changed

+48
-48
lines changed

9 files changed

+48
-48
lines changed

DjangoBlog/settings.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@
5151
'django.middleware.security.SecurityMiddleware',
5252
'django.contrib.sessions.middleware.SessionMiddleware',
5353
'django.middleware.gzip.GZipMiddleware',
54-
# 'django.middleware.cache.UpdateCacheMiddleware',
54+
'django.middleware.cache.UpdateCacheMiddleware',
5555
'django.middleware.common.CommonMiddleware',
56-
# 'django.middleware.cache.FetchFromCacheMiddleware',
56+
'django.middleware.cache.FetchFromCacheMiddleware',
5757
'django.middleware.csrf.CsrfViewMiddleware',
5858
'django.contrib.auth.middleware.AuthenticationMiddleware',
5959
'django.contrib.messages.middleware.MessageMiddleware',

accounts/views.py

-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ def form_valid(self, form):
6464
if form.is_valid():
6565
from DjangoBlog.utils import cache
6666
cache.clear()
67-
# login(self.request, form.get_user())
6867
auth.login(self.request, form.get_user())
6968

7069
return HttpResponseRedirect('/')

blog/context_processors.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ def seo_processor(requests):
3636
'ARTICLE_SUB_LENGTH': settings.ARTICLE_SUB_LENGTH,
3737
'nav_category_list': Category.objects.all(),
3838
'nav_pages': Article.objects.filter(type='p', status='p'),
39-
'MAX_COMMENTID': Comment.objects.latest().pk,
40-
'MAX_ARTICLEID': Article.objects.latest().pk
39+
# 'MAX_COMMENTID': Comment.objects.latest().pk,
40+
# 'MAX_ARTICLEID': Article.objects.latest().pk
4141
}
4242
cache.set(key, value, 60 * 60 * 10)
4343
return value

blog/models.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@
99

1010

1111
class BaseModel(models.Model):
12+
slug = models.SlugField(default='no-slug', max_length=60, blank=True)
13+
1214
def save(self, *args, **kwargs):
15+
if not self.slug or self.slug == 'no-slug' or not self.id:
16+
# Only set the slug when the object is created.
17+
slug = self.title if 'title' in self.__dict__ else self.name
18+
self.slug = slugify(slug)
1319
super().save(*args, **kwargs)
1420

1521
if 'update_fields' in kwargs and len(kwargs['update_fields']) == 1 and kwargs['update_fields'][0] == 'views':
@@ -48,8 +54,7 @@ class Article(BaseModel):
4854
body = models.TextField('正文')
4955
created_time = models.DateTimeField('创建时间', auto_now_add=True)
5056
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
51-
pub_time = models.DateTimeField('发布时间', blank=True, null=True,
52-
help_text="不指定发布时间则视为草稿,可以指定未来时间,到时将自动发布。")
57+
pub_time = models.DateTimeField('发布时间', blank=True, null=True)
5358
status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='p')
5459
comment_status = models.CharField('评论状态', max_length=1, choices=COMMENT_STATUS, default='o')
5560
type = models.CharField('类型', max_length=1, choices=TYPE, default='a')
@@ -59,8 +64,6 @@ class Article(BaseModel):
5964
category = models.ForeignKey('Category', verbose_name='分类', on_delete=models.CASCADE, blank=True, null=True)
6065
tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True)
6166

62-
slug = models.SlugField(default='no-slug', max_length=60, blank=True)
63-
6467
def __str__(self):
6568
return self.title
6669

@@ -124,12 +127,12 @@ def get_admin_url(self):
124127
@cached_property
125128
def next_article(self):
126129
# 下一篇
127-
return Article.objects.filter(id__gt=self.id, status=0).order_by('id').first()
130+
return Article.objects.filter(id__gt=self.id, status='p').order_by('id').first()
128131

129132
@cached_property
130133
def prev_article(self):
131134
# 前一篇
132-
return Article.objects.filter(id__lt=self.id, status=0).first()
135+
return Article.objects.filter(id__lt=self.id, status='p').first()
133136

134137

135138
'''
@@ -209,7 +212,7 @@ class Meta:
209212
verbose_name_plural = verbose_name
210213

211214
def get_absolute_url(self):
212-
return reverse('blog:category_detail', kwargs={'category_name': self.name})
215+
return reverse('blog:category_detail', kwargs={'category_name': self.slug})
213216

214217
def __str__(self):
215218
return self.name
@@ -225,7 +228,7 @@ def __str__(self):
225228
return self.name
226229

227230
def get_absolute_url(self):
228-
return reverse('blog:tag_detail', kwargs={'tag_name': self.name})
231+
return reverse('blog:tag_detail', kwargs={'tag_name': self.slug})
229232

230233
@cache_decorator(60 * 60 * 10)
231234
def get_article_count(self):

blog/urls.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ def key_prefixer(request):
3535
views.ArticleDetailView.as_view(),
3636
name='detail'),
3737

38-
url(r'^blogpage/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<page_id>\d+)-(?P<slug>\S+).html$',
38+
url(r'^blogpage/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<page_id>\d+)-(?P<slug>[\w-]+).html$',
3939
views.ArticleDetailView.as_view(),
4040
name='pagedetail'),
41-
url(r'^category/(?P<category_name>\S+).html$', views.CategoryDetailView.as_view(), name='category_detail'),
41+
url(r'^category/(?P<category_name>[\w-]+).html$', views.CategoryDetailView.as_view(), name='category_detail'),
42+
# url(r'^category/(?P<category_name>[\w-]+)/(?P<page>\d+).html$', views.CategoryDetailView.as_view(),
43+
# name='category_detail'),
4244
url(r'^author/(?P<author_name>\w+).html$', views.AuthorDetailView.as_view(), name='author_detail'),
4345
url(r'^tag/(?P<tag_name>.+).html$', views.TagDetailView.as_view(), name='tag_detail'),
4446
url(r'^upload', views.fileupload, name='upload'),

blog/views.py

+22-30
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,18 @@ def get_description(self):
4545
pass
4646
"""
4747

48-
48+
"""
4949
class CachedTemplateView(ListView):
5050
@classonlymethod
5151
def as_view(cls, **initkwargs):
5252
# print(request)
5353
5454
view = super(CachedTemplateView, cls).as_view(**initkwargs)
5555
return cache_page(60 * 60 * 10)(view)
56+
"""
5657

5758

58-
class ArticleListView(CachedTemplateView):
59+
class ArticleListView(ListView):
5960
# template_name属性用于指定使用哪个模板进行渲染
6061
template_name = 'blog/article_index.html'
6162

@@ -67,25 +68,13 @@ class ArticleListView(CachedTemplateView):
6768
paginate_by = settings.PAGINATE_BY
6869
page_kwarg = 'page'
6970

70-
def get_cache_key(self):
71-
raise NotImplementedError("implement this function")
71+
def get_view_cache_key(self):
72+
return self.request.get['pages']
7273

7374

7475
class IndexView(ArticleListView):
7576
def get_queryset(self):
76-
"""
77-
try:
78-
# _auth_user_id
79-
from DjangoBlog.utils import SessionStore
80-
s = SessionStore(session_key='_auth_user_id')
81-
print(s)
82-
except:
83-
pass
84-
"""
8577
article_list = Article.objects.filter(type='a', status='p')
86-
# for article in article_list:
87-
# article.body = article.body[0:settings.ARTICLE_SUB_LENGTH]
88-
# # article.body = markdown2.markdown(article.body)
8978
return article_list
9079

9180

@@ -97,6 +86,7 @@ class ArticleDetailView(DetailView):
9786

9887
def get_object(self):
9988
obj = super(ArticleDetailView, self).get_object()
89+
10090
obj.viewed()
10191
# obj.body = markdown2.markdown(obj.body)
10292
self.object = obj
@@ -128,11 +118,13 @@ def get_context_data(self, **kwargs):
128118

129119
return super(ArticleDetailView, self).get_context_data(**kwargs)
130120

121+
"""
131122
@classonlymethod
132123
def as_view(cls, **initkwargs):
133124
self = cls(**initkwargs)
134125
keyperfix = "blogdetail"
135126
return cache_page(60 * 60 * 10, key_prefix=keyperfix)(super(ArticleDetailView, cls).as_view(**initkwargs))
127+
"""
136128

137129

138130
"""
@@ -159,20 +151,13 @@ def get_object(self):
159151

160152

161153
class CategoryDetailView(ArticleListView):
162-
# template_name = 'article_index.html'
163-
# context_object_name = 'article_list'
164-
165-
# pk_url_kwarg = 'article_name'
166154
page_type = "分类目录归档"
167-
"""
168-
def get_cache_key(self):
169-
categoryname = self.kwargs['category_name']
170-
return "category_list:{categoryname}".format(categoryname=categoryname)
171-
"""
172155

173156
def get_queryset(self):
174-
categoryname = self.kwargs['category_name']
175-
157+
slug = self.kwargs['category_name']
158+
category = Category.objects.get(slug=slug)
159+
categoryname = category.name
160+
self.categoryname = categoryname
176161
try:
177162
categoryname = categoryname.split('/')[-1]
178163
except:
@@ -181,7 +166,10 @@ def get_queryset(self):
181166
return article_list
182167

183168
def get_context_data(self, **kwargs):
184-
categoryname = self.kwargs['category_name']
169+
# slug = self.kwargs['category_name']
170+
# category = Category.objects.get(slug=slug)
171+
# categoryname = category.name
172+
categoryname = self.categoryname
185173
try:
186174
categoryname = categoryname.split('/')[-1]
187175
except:
@@ -221,12 +209,16 @@ class TagDetailView(ArticleListView):
221209
page_type = '分类标签归档'
222210

223211
def get_queryset(self):
224-
tag_name = self.kwargs['tag_name']
212+
slug = self.kwargs['category_name']
213+
tag = Tag.objects.get(slug=slug)
214+
tag_name = tag.name
215+
self.name = tag_name
225216
article_list = Article.objects.filter(tags__name=tag_name)
226217
return article_list
227218

228219
def get_context_data(self, **kwargs):
229-
tag_name = self.kwargs['tag_name']
220+
# tag_name = self.kwargs['tag_name']
221+
tag_name = self.name
230222
kwargs['page_type'] = TagDetailView.page_type
231223
kwargs['tag_name'] = tag_name
232224
return super(TagDetailView, self).get_context_data(**kwargs)

templates/blog/article_detail.html

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{% extends 'share_layout/base.html' %}
22
{% load blog_tags %}
3-
43
{% block header %}
54
<title>{{ article.title }} | {{ SITE_DESCRIPTION }}</title>
65
<meta property="og:type" content="article"/>
@@ -16,7 +15,6 @@
1615
{% endfor %}
1716
<meta property="og:site_name" content="{{ SITE_NAME }}"/>
1817
{% endblock %}
19-
2018
{% block content %}
2119
<div id="primary" class="site-content">
2220
<div id="content" role="main">
@@ -47,6 +45,7 @@ <h3 class="assistive-text">文章导航</h3>
4745
{% include 'comments/tags/post_comment.html' %}
4846
{% endif %}
4947
</div><!-- #primary -->
48+
5049
{% endblock %}
5150

5251

templates/blog/article_index.html

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{% extends 'share_layout/base.html' %}
22
{% load blog_tags %}
3+
34
{% block header %}
45
{% if tag_name %}
56
<title>{{ page_type }}:{{ tag_name }} | {{ SITE_DESCRIPTION }}</title>
@@ -17,6 +18,7 @@
1718
<meta property="og:site_name" content="{{ SITE_NAME }}"/>
1819
{% endblock %}
1920
{% block content %}
21+
2022
<div id="primary" class="site-content">
2123
<div id="content" role="main">
2224
{% if page_type and tag_name %}
@@ -48,6 +50,7 @@ <h3 class="assistive-text">文章导航</h3>
4850
{% endif %}
4951
</div><!-- #content -->
5052
</div><!-- #primary -->
53+
5154
{% endblock %}
5255

5356

templates/share_layout/base.html

+3-1
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,15 @@ <h2 class="site-description">{{ SITE_DESCRIPTION }}</h2>
6262

6363
</header><!-- #masthead -->
6464
<div id="main" class="wrapper">
65+
6566
{% block content %}
6667
{% endblock %}
6768

68-
{% cache 36000 sidebar request.user.username MAX_COMMENTID MAX_ARTICLEID %}
69+
{% cache 36000 sidebar request.user.username %}
6970
{% block sidebar %}
7071
{% endblock %}
7172
{% endcache %}
73+
7274
</div><!-- #main .wrapper -->
7375
{% include 'share_layout/footer.html' %}
7476
</div><!-- #page -->

0 commit comments

Comments
 (0)