2014-07-26 6 views
6

Sto riscontrando qualche problema con le pagine di ballerina.pagine di wagtail che danno l'URL `none` con lo stato` live`

dal guscio

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

Ha funzionato per un po ', mi sono trasferito il Blog Page dal root ad un Blog Index Page in admin ballerina (vedi models.py sotto) e per qualche motivo, la pagina mi sono trasferito disapeared da l'amministratore così ho provato a ripetere i passaggi che ho fatto creando nuovamente il mio database con ./manage.py sycndb e ./manage.py migrate, ho creato nuovamente le pagine e ora gli URL non vengono più visualizzati.

Ho aggiunto un punto di interruzione in wagtailcore/models.py per vedere cosa sta succedendo. sezione critica sembra essere qui intorno:

@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) non è mai vero nel mio caso.

variabili interne quel ciclo:

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 

Tutto questo significa che le mie pagine create non sono instradabile. Riesco ancora a vedere le mie pagine correttamente utilizzando la modalità di anteprima da ballerina di amministrazione, ma non riesco a trovare il motivo per cui non c'è alcun percorso per le mie pagine :(.

Ecco il mio 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"), 
] 

risposta

7

In generale si dovrebbe creare pagine come figli della home page. Internamente, questo significa che la vostra pagina di indice del blog riceveranno un url_path di /home/blog/, e dal momento che /home/ è mappato http://localhost nella lista root_paths, questo darà un URL finale di http://localhost/blog/.

come si hai visto, se crei p età al livello di root accanto alla home page, esisteranno al di fuori del record del sito predefinito e quindi non avranno un URL instradabile. Tuttavia, puoi impostare altri siti tramite l'interfaccia di amministrazione di Django allo http://localhost/django-admin/, ad esempio, se desideri ospitare il tuo blog allo http://blog.example.com/, creerai una voce di sito per quel dominio radicata nella pagina dell'indice del blog.

Problemi correlati