Gab*_*oux 8 python django url wagtail
我有一些令人烦恼的麻烦页面.
从壳
>>> Site.get_site_root_paths()
[(1, u'/home/', u'http://localhost')]
>>> BlogPage.objects.all()[0]
<BlogPage: Hello wagtail>
>>> BlogPage.objects.all()[0].url
>>> BlogPage.objects.all()[0].full_url
>>> BlogPage.objects.all()[0].status_string
'live'
>>> BlogPage.objects.all()[0].url_path
u'/blog/hello-wagtail/'
Run Code Online (Sandbox Code Playgroud)
它工作了一段时间,我搬到了Blog Page
从root
一个Blog Index Page
在鹡鸰管理(见models.py
波纹管),由于某种原因,我提出从管理disapeared的页面,所以我想重复我做了创建我的数据库再次步骤./manage.py sycndb
和./manage.py migrate
,再次创建页面,现在网址不再出现了.
我添加了一个断点,wagtailcore/models.py
看看发生了什么.关键部分似乎在这里:
@property
def url(self):
"""
Return the 'most appropriate' URL for referring to this page from the pages we serve,
within the Wagtail backend and actual website templates;
this is the local URL (starting with '/') if we're only running a single site
(i.e. we know that whatever the current page is being served from, this link will be on the
same domain), and the full URL (with domain) if not.
Return None if the page is not routable.
"""
root_paths = Site.get_site_root_paths()
for (id, root_path, root_url) in Site.get_site_root_paths():
if self.url_path.startswith(root_path):
return ('' if len(root_paths) == 1 else root_url) + self.url_path[len(root_path) - 1:]
Run Code Online (Sandbox Code Playgroud)
self.url_path.startswith(root_path)
在我的情况下永远不会是真的.
该循环内的变量:
id = {int} 1
root_path = {unicode} u'/home/'
root_paths = {list} [(1, u'/home/', u'http://localhost')]
root_url = {unicode} u'http://localhost'
self = {Page} Blog
Run Code Online (Sandbox Code Playgroud)
所有这些意味着我创建的页面不可路由.我仍然可以使用wagtail admin的预览模式正确查看我的页面,但我找不到为什么我的页面没有路由:(.
这是我的 models.py
from django.db import models
from wagtail.wagtailcore.models import Page, Orderable
from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel, InlinePanel, PageChooserPanel
from modelcluster.fields import ParentalKey
class BlogPage(Page):
body = RichTextField()
intro = RichTextField()
date = models.DateField("Post date")
indexed_fields = ('body', )
search_name = "Blog Page"
BlogPage.content_panels = [
FieldPanel('title', classname="full title"),
FieldPanel('date'),
FieldPanel('intro', classname="full"),
FieldPanel('body', classname="full"),
]
class LinkFields(models.Model):
link_page = models.ForeignKey(
'wagtailcore.Page',
null=True,
blank=True,
related_name='+'
)
panels = [
PageChooserPanel('link_page'),
]
class Meta:
abstract = True
class RelatedLink(LinkFields):
title = models.CharField(max_length=255, help_text="Link title")
panels = [
FieldPanel('title'),
MultiFieldPanel(LinkFields.panels, "Link"),
]
class Meta:
abstract = True
class BlogIndexPageRelatedLink(Orderable, RelatedLink):
page = ParentalKey('main.BlogIndexPage', related_name='related_links')
class BlogIndexPage(Page):
intro = models.CharField(max_length=256)
indexed_fields = ('body', )
search_name = "Blog Index Page"
BlogIndexPage.content_panels = [
FieldPanel('title', classname="full title"),
FieldPanel('intro', classname="full"),
InlinePanel(BlogIndexPage, 'related_links', label="Related links"),
]
Run Code Online (Sandbox Code Playgroud)
通常,您应该将页面创建为主页的子页面.在内部,这意味着您的博客索引页面将收到url_path /home/blog/
,并且由于/home/
映射到http://localhost
root_paths列表,这将为其提供最终的URL http://localhost/blog/
.
如您所见,如果您在主页的根级别创建页面,它们将存在于默认站点记录之外,因此它们将没有可路由的URL.但是,您可以通过Django管理界面设置其他站点http://localhost/django-admin/
- 例如,如果您想在http://blog.example.com/上托管您的博客,您可以为源自您博客的域创建站点条目索引页面.
归档时间: |
|
查看次数: |
2581 次 |
最近记录: |