2014-07-26 1 views
6

Je rencontre des problèmes avec les pages de wagtail.pages wagtail donnant l'URL `none` avec le statut` live`

de la coquille

>>> 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/' 

Il a travaillé pendant un certain temps, je me suis déplacé le Blog Page du root à un Blog Index Page dans l'admin bergeronnette (voir models.py ci-dessous) et pour une raison quelconque, la page que je Déplacé disapeared de l'administrateur donc j'ai essayé de répéter les étapes que j'ai faites en créant à nouveau ma base de données avec ./manage.py sycndb et ./manage.py migrate, a créé des pages encore et maintenant les URLs n'apparaissent plus.

J'ai ajouté un point d'arrêt dans wagtailcore/models.py pour voir ce qui se passe. section critique semble être ici:

@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:] 

self.url_path.startswith(root_path) est jamais vrai dans mon cas.

variables à l'intérieur de cette boucle:

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 

Tout cela signifie que mes pages créées ne sont pas routable. Je peux toujours voir mes pages en utilisant correctement le mode de prévisualisation de bergeronnette admin, mais je ne peux pas trouver la raison pour laquelle il n'y a pas de route vers mes pages :(.

Voici mon 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"), 
] 

Répondre

7

En général, vous devez créer des pages comme des enfants de la page d'accueil. en interne, cela signifie que votre page d'index blog recevra un URL_path de /home/blog/, et depuis /home/ est mis en correspondance http://localhost dans la liste des root_paths, cela donnera une URL finale de http://localhost/blog/.

comme vous ai vu, si vous créez p âges au niveau de la racine à côté de la page d'accueil, ils existeront en dehors de l'enregistrement du site par défaut, et ils n'auront donc pas d'URL routable. Cependant, vous pouvez configurer des sites supplémentaires via l'interface d'administration de Django au http://localhost/django-admin/ - par exemple, si vous souhaitez héberger votre blog au http://blog.example.com/, vous devez créer une entrée de site pour ce domaine à partir de la page d'index de votre blog.

Questions connexes