在wagtail/django
如何创建基本wagtail Page model
,创建html模板,然后告诉该模型作为特定网址的视图?
from django.db import models
from wagtail.wagtailcore.models import Page
class MyPage(Page):
title = models.CharField(blank=True, null=True, max_length=255)
#...
我希望网址像
一样注册url(r'^monkey/(?P<slug>[A-Za-z0-9]+)$', ...)
但我没有在项目外部存储的公共urls.py
文件夹。我尝试使用RoutablePageMixin
,但我认为这适用于子页面。我也知道在结构中存储html模板的位置,这不是问题。
答案 0 :(得分:1)
您可能想要类似的东西:
from django.http import Http404
from django.views import View
from wagtail.core.views import serve
class WagtailPageServeView(View):
"""
A default way to serve up wagtail pages in urls
"""
wagtail_slug = None
def get(self, request, *args, **kwargs):
if self.wagtail_slug:
return serve(request, self.wagtail_slug)
else:
raise Http404(
f"WagtailPageServeView missing 'wagtail_slug'. Cannot serve "
f"request.path: {request.path}"
)
然后您可以在urls.py
中执行以下操作:
urlpatterns += [
re_path(r'^$', WagtailPageServeView.as_view(wagtail_slug='/'), name='home'),
]
答案 1 :(得分:0)
在Wagtail中,您正在创建页面类型,然后在CMS中创建该页面类型的实例。
即使您只打算使用该页面一次,您仍然需要输入一个类型。按照此逻辑,页面URL是通过页面的父级和slug在CMS内部定义的。通过这些方式,您很可能可以实现您想要的。
如果您想覆盖页面模板并创建自定义网址,则可以覆盖模型上的get_url_parts method。
此外,如果您想专门跳过此页面的Wagtail,请记住Wagtail仅基于Django构建。您始终可以创建一个新模块并在该模型中定义URL。如果您检查自己的网站urls.py
,则会看到see形网址格式。您可以将其更改为如下所示:
urlpatterns = [
# other urls...
url(r'wagtail/', include(wagtail_urls)),
url(r'^monkey/', ('monkey_app.urls', 'monkey_app')),
]