2017-06-06 1 views
1

Ich versuche eine Sitemap zu einer Baustelle hinzuzufügen, die ich gebaut habe (das erste Mal mit dem Sitemaps-Framework in Djnago, also nicht 100% sicher, was ich tun sollte).Django Sitemaps, zwei Seiten mit dem gleichen Objekt

Wie auch immer, ich habe zwei Seiten, eine "Job Detail" Seite und eine "Job apply" Seite. Diese basieren beide auf dem Job-Modell und haben URLs, die auf die Job-ID verweisen.

urls.py

url(r'^job-details/(?P<pk>\d+)/$', views.JobDetailView.as_view(), name='job_detail') , 
url(r'apply/(?P<pk>\d+)/$', views.JobApplyView.as_view(), name='job_apply' ), 

sitemap.py

class JobsSitemap(Sitemap): 
    changefreq = "daily" 
    priority = 0.5 

    def items(self): 
     return Job.objects.filter(active=True, 
           venue__contacts__account_verified=True, 
           date_expires__gte=date.today()) 

    def lastmod(self, obj): 
     return obj.date_posted 

models.py

class Job(models.Model): 
    ... field definitions here .... 

    def get_absolute_url(self): 
     return reverse('job_detail', kwargs={'pk': self.id}) 

Nun das Problem ist, dass ich bereits angegeben get_absolute_url() auf dem Job-Modell um auf die Jobdetailseite zu zeigen. Also kann ich es auch nicht auf die Job_Apply-Seite verweisen.

Ich habe versucht, es nach dem Abschnitt "Sitemap für statische Ansichten" in den Dokumenten zu konfigurieren, aber das beschwert sich, dass es keine umgekehrte Übereinstimmung für diese URL gibt (da es das Argument Kwargs erwartet).

Was ist der richtige Umgang mit Seiten, die auf demselben Objekt basieren?

+0

zu Ihrem Modell namens get_apply_url eine neue Methode hinzufügen und gibt die job_apply URL oder Verwendung {% url "job_apply" job.pk%} in Ihrer Vorlage –

+0

Das hilft nicht, da ich keine Vorlage verwende, nur die Standardvorlage für sitemaps.xml, und wenn ich mir das anschaue, ruft sie get_absolute_url nicht auf - Es hat eine Reihe von URLs übergeben. get_absolute_url() wird von django code aufgerufen, nicht von mir. –

+0

Sie können Ihre eigene CustomSitemap-Klasse definieren, die von sitemaps.Sitemap und der Überschreibungsortmethode erbt. – snakey

Antwort

1

Es gibt vielleicht andere Möglichkeiten, aber es ist wirklich einfach, zwei SiteMaps zu erstellen. Lassen Sie das aktuelle wie es ist und erstellen Sie ein neues, dieses Mal achten Sie darauf, die [location][1] Eigenschaft zu überschreiben.

Standort Optional. Entweder eine Methode oder ein Attribut.

Wenn es sich um eine Methode handelt, sollte der absolute Pfad für ein gegebenes Objekt zurückgegeben werden, wie von items() zurückgegeben.

Wenn es ein Attribut ist, sollte sein Wert ein String einen absoluten Pfad darstellt, für jedes Objekt zu verwenden, zurück

class JobsApplySitemap(Sitemap): 
    changefreq = "daily" 
    priority = 0.5 

    def items(self): 
     return Job.objects.filter(active=True, 
           venue__contacts__account_verified=True, 
           date_expires__gte=date.today()) 

    def location(self, obj): 
     return "/apply/{0}/".format(obj.pk) 
     # you can use reverse instead 


    def lastmod(self, obj): 
     return obj.date_posted 
+0

Ich habe das gerade selbst entdeckt, bevor ich deinen Beitrag gesehen habe, aber das sieht nach dem richtigen Weg aus. –

+0

Sorry, ich konnte das nicht ein paar Minuten früher posten. – e4c5

Verwandte Themen