Merge pull request '修改错误' (#48) from djq_branch into master

phm9gvnzi 3 months ago
commit b10b52cbd6

@ -86,7 +86,7 @@ class ArticleListView(ListView):
def get_context_data(self, **kwargs):
kwargs['linktype'] = self.link_type
return super(ArticleListView, self).get_context_data(**kwargs)
return super(ArticleListView, self).get_context_data(** kwargs)
class IndexView(ArticleListView):
@ -150,7 +150,7 @@ class ArticleDetailView(DetailView):
kwargs['next_article'] = self.object.next_article
kwargs['prev_article'] = self.object.prev_article
context = super(ArticleDetailView, self).get_context_data(**kwargs)
context = super(ArticleDetailView, self).get_context_data(** kwargs)
article = self.object
# Action Hook, 通知插件"文章详情已获取"
hooks.run_action('after_article_body_get', article=article, request=self.request)
@ -197,7 +197,7 @@ class CategoryDetailView(ArticleListView):
pass
kwargs['page_type'] = CategoryDetailView.page_type
kwargs['tag_name'] = categoryname
return super(CategoryDetailView, self).get_context_data(**kwargs)
return super(CategoryDetailView, self).get_context_data(** kwargs)
class AuthorDetailView(ArticleListView):
@ -223,7 +223,7 @@ class AuthorDetailView(ArticleListView):
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)
return super(AuthorDetailView, self).get_context_data(** kwargs)
class TagDetailView(ArticleListView):
@ -255,7 +255,7 @@ class TagDetailView(ArticleListView):
tag_name = self.name
kwargs['page_type'] = TagDetailView.page_type
kwargs['tag_name'] = tag_name
return super(TagDetailView, self).get_context_data(**kwargs)
return super(TagDetailView, self).get_context_data(** kwargs)
class ArchivesView(ArticleListView):
@ -377,3 +377,59 @@ def permission_denied_view(
def clean_cache_view(request):
cache.clear()
return HttpResponse('ok')
# ==============================================================
# 以下为新增的 DjangoBlogFeed 类
# ==============================================================
from django.contrib.syndication.views import Feed
from django.urls import reverse
class DjangoBlogFeed(Feed):
"""
自定义的 RSS Feed
用于生成网站的 RSS 订阅源
"""
# 订阅源的标题
title = _("Django Blog")
# 订阅源的链接
link = "/"
# 订阅源的描述
description = _("Latest articles from Django Blog")
def items(self):
"""
返回要在订阅中显示的项目列表
这里我们返回最新的 10 篇已发布的文章
"""
return Article.objects.filter(status='p').order_by('-created_time')[:10]
def item_title(self, item):
"""
返回单个项目文章的标题
"""
return item.title
def item_description(self, item):
"""
返回单个项目文章的描述
这里我们使用文章的摘要如果没有摘要则使用正文的前 200 个字符
"""
if item.summary:
return item.summary
# 为了安全,确保不返回 None
return item.body[:200] + "..." if item.body else ""
def item_link(self, item):
"""
返回单个项目文章的绝对链接
"""
return reverse('blog:article_detail', kwargs={'article_id': item.pk})
def item_pubdate(self, item):
"""
返回单个项目文章的发布日期
这是可选的但推荐添加以符合 RSS 规范
"""
return item.created_time

@ -0,0 +1,87 @@
codecov:
require_ci_to_pass: yes
coverage:
precision: 2
round: down
range: "70...100"
status:
project:
default:
target: auto
threshold: 1%
informational: true
patch:
default:
target: auto
threshold: 1%
informational: true
parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: no
macro: no
comment:
layout: "reach,diff,flags,tree"
behavior: default
require_changes: no
ignore:
# Django 相关
- "*/migrations/*"
- "manage.py"
- "*/settings.py"
- "*/wsgi.py"
- "*/asgi.py"
# 测试相关
- "*/tests/*"
- "*/test_*.py"
- "*/*test*.py"
# 静态文件和模板
- "*/static/*"
- "*/templates/*"
- "*/collectedstatic/*"
# 国际化文件
- "*/locale/*"
- "**/*.po"
- "**/*.mo"
# 文档和部署
- "*/docs/*"
- "*/deploy/*"
- "README*.md"
- "LICENSE"
- "Dockerfile"
- "docker-compose*.yml"
- "*.yaml"
- "*.yml"
# 开发环境
- "*/venv/*"
- "*/__pycache__/*"
- "*.pyc"
- ".coverage"
- "coverage.xml"
# 日志文件
- "*/logs/*"
- "*.log"
# 特定文件
- "*/whoosh_cn_backend.py" # 搜索后端
- "*/elasticsearch_backend.py" # 搜索后端
- "*/MemcacheStorage.py" # 缓存存储
- "*/robot.py" # 机器人相关
# 配置文件
- "codecov.yml"
- ".coveragerc"
- "requirements*.txt"

@ -36,8 +36,8 @@ class Comment(models.Model):
get_latest_by = 'id'
def __str__(self):
<<<<<<< HEAD
return self.body
=======
return self.body
>>>>>>> ccy_branch

@ -17,23 +17,35 @@ from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.contrib.sitemaps.views import sitemap
from django.urls import path, include
from django.urls import re_path
from haystack.views import search_view_factory
from django.urls import path, re_path, include
from django.contrib import admin
# 从 blog.views 导入所需视图(包括我们之前添加的 DjangoBlogFeed
from blog.views import (
page_not_found_view,
server_error_view,
permission_denied_view,
DjangoBlogFeed,
EsSearchView # 假设你在 blog 应用中有一个 EsSearchView
)
from blog.views import EsSearchView
# 使用你自定义的 admin_site
from djangoblog.admin_site import admin_site
from djangoblog.elasticsearch_backend import ElasticSearchModelSearchForm
from djangoblog.feeds import DjangoBlogFeed
from djangoblog.sitemap import ArticleSiteMap, CategorySiteMap, StaticViewSitemap, TagSiteMap, UserSiteMap
from django.contrib import admin
from django.urls import path, re_path, include
from django.conf.urls.i18n import i18n_patterns
from django.contrib.sitemaps.views import sitemap
from blog.views import page_not_found_view, server_error_view, permission_denied_view, DjangoBlogFeed
from search.views import search_view_factory
from es_search.views import EsSearchView
from es_search.forms import ElasticSearchForm
# 导入站点地图
from djangoblog.sitemap import (
ArticleSiteMap,
CategorySiteMap,
StaticViewSitemap,
TagSiteMap,
UserSiteMap
)
# --- 暂时注释掉需要 'es_search' 或 'search' 应用的导入 ---
# from haystack.views import search_view_factory
# from djangoblog.elasticsearch_backend import ElasticSearchModelSearchForm
# from es_search.forms import ElasticSearchForm
# from search.views import search_view_factory
sitemaps = {
'blog': ArticleSiteMap,
@ -52,20 +64,28 @@ urlpatterns = [
]
urlpatterns += i18n_patterns(
re_path(r'^admin/', admin.site.urls),
# 使用自定义的 admin_site
re_path(r'^admin/', admin_site.urls),
re_path(r'', include('blog.urls', namespace='blog')),
re_path(r'mdeditor/', include('mdeditor.urls')),
re_path(r'', include('comments.urls', namespace='comment')),
re_path(r'', include('accounts.urls', namespace='account')),
re_path(r'', include('oauth.urls', namespace='oauth')),
re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
re_path(r'^feed/$', DjangoBlogFeed()),
re_path(r'^rss/$', DjangoBlogFeed()),
re_path(r'^search', search_view_factory(view_class=EsSearchView, form_class=ElasticSearchForm), name='search'),
re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='sitemap'),
re_path(r'^feed/$', DjangoBlogFeed(), name='feed'),
re_path(r'^rss/$', DjangoBlogFeed(), name='rss'),
# --- 暂时注释掉需要 'es_search' 应用的搜索路由 ---
# 如果你的搜索功能在 blog 应用中实现,可以这样配置:
# re_path(r'^search/', EsSearchView.as_view(), name='search'),
# --- 以下是需要 'es_search' 或 'search' 应用的原始配置,现已注释 ---
# re_path(r'^search', search_view_factory(view_class=EsSearchView, form_class=ElasticSearchForm), name='search'),
re_path(r'', include('servermanager.urls', namespace='servermanager')),
re_path(r'', include('owntracks.urls', namespace='owntracks')),
prefix_default_language=False
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Loading…
Cancel
Save