【发布时间】:2021-09-06 23:12:00
【问题描述】:
我有一个自定义的平面模型:
from django.contrib.flatpages.models import FlatPage
class MyFlatPage(FlatPage):
publish = models.DateTimeField()
以便我可以在以后添加发布日期。
现在,我在前端没有适当的平面页面列表,我对前端页面的使用更像是“一次性”,我在其中指定了 URL 和所有这些。例如,“about”、“2019prize”、“Today's walk”之类的。
urls.py 设置为捕获所有平面页面:
from django.contrib.flatpages import views
re_path(r'^(?P<url>.*/)$', views.flatpage)
如何将我创建的这些页面设置为仅在 publish 日期到达后显示?我知道我可以通过查找 pages.filter(publish__lte=now) 之类的内容来过滤它们。不过,我应该在哪里以及如何放置该代码?
其他信息
我想我需要创建一个自定义视图,对吗?原图在../lib/python3.8/site-packages/django/contrib/flatpages/views.py:
def flatpage(request, url)
if not url.startswith('/'):
url = '/' + url
site_id = get_current_site(request).id
try:
f = get_object_or_404(FlatPage, url=url, sites=site_id)
except Http404:
if not url.endswith('/') and settings.APPEND_SLASH:
url += '/'
f = get_object_or_404(FlatPage, url=url, sites=site_id)
return HttpResponsePermanentRedirect('%s/' % request.path)
else:
raise
return render_flatpage(request, f)
@csrf_protect
def render_flatpage(request, f):
if f.registration_required and not request.user.is_authenticated:
from django.contrib.auth.views import redirect_to_login
return redirect_to_login(request.path)
if f.template_name:
template = loader.select_template((f.template_name, DEFAULT_TEMPLATE))
else:
template = loader.get_template(DEFAULT_TEMPLATE)
f.title = mark_safe(f.title)
f.content = mark_safe(f.content)
return HttpResponse(template.render({'flatpage': f}, request))
如何扩展它,添加我的if publish__lte=now 代码?
【问题讨论】:
标签: django django-models django-flatpages