J'utilise https: //docs.djangoproject .COM / EN / DEV / REF / REPR / SITEMS /? DE = OLDDOCS . P>
J'ai un site de plan généré depuis Api.Mydomain.me pour le domaine: Mydomain.com. P>
Puis-je, avec Django, spécifier une URL de base? P>
Maintenant avec emplacement () Méthode Retour: P>
API.MYDOMAIN.ME/PAGE/3123 à la place de Mydomain.com/page/3123 P>
est-ce possible? Merci. P>
6 Réponses :
Vous pouvez essayer quelque chose comme ça:
from django.contrib.sites.models import Site, SiteManager def get_fake_site(self): return Site(domain='mydomain.com', name='mydomain.com') SiteManager.add_to_class('get_current', get_fake_site)
Petit problème: type objet 'Sitemanager' n'a aucun attribut 'add_to_class'
Ouais, c'est pour les modèles seulement. Quoi qu'il en soit, votre solution ci-dessous est beaucoup plus appropriée.
résolu, j'ai redéfini mon propre get_urls. Il fonctionne:
class MySitemap(Sitemap): changefreq = "never" priority = 0.5 location = "" def get_urls(self, site=None, **kwargs): site = Site(domain='mydomain.com', name='mydomain.com') return super(MySitemap, self).get_urls(site=site, **kwargs) def items(self): return MyObj.objects.all().order_by('pk')[:1000] def lastmod(self, obj): return obj.timestamp
Fonctionne très bien. Je ne sais pas quelle version de Django utilise, mais si vous utilisez Django 1.5.1, cela ne fonctionnera que si vous ajoutez un argument "protocole" dans la fonction get_urls. Github.com/django/django/blob/ 1.5.1 / DJANGO / STATEUR / SITEMS / ...
@DDAMADRE: J'ai essayé mais faisant face à un problème "get_urls () a eu un argument de mots-clés inattendu" site "" pourriez-vous vous aider à aider pour la même chose? Merci à adv.
Et si vous avez plusieurs classes Sitemaps, vous pouvez utiliser une approche de mixine.
Exemple de Django 1.5.1. P>
from sitemaps import MySitemap from sitemaps import AnotherSitemap from yourapp.views import SomeDetailMyObjView admin.autodiscover() sitemaps = { 'mysitemap': MySitemap, 'anothersitemap': AnotherSitemap, } urlpatterns = patterns('', # other urls... url(r'^accessing-myobj/(?P<myobj_slug>[-\w]+)$', SomeDetailMyObjView, name='url_for_access_myobj'), (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), )
Je ne savais pas utiliser code> site code> dans mon code à l'aide de réponses précédentes, donc j'ai utilisé ci-dessous le code:
class Site: domain = 'my_site.com' class MySitemap(Sitemap): def get_urls(self, site=None, **kwargs): site = Site() return super(MySitemap, self).get_urls(site=site, **kwargs)
J'utilise un correctif en créant une étiquette de modèle personnalisée et utilisez cette fonction pour remplacer l'URL: https://www.fraydit.com/blogs/wagtail-sitemap-in -Docker / p>
Veuillez fournir une explication détaillée à votre réponse afin que l'utilisateur suivant comprenne votre réponse mieux. En outre, fournissez une couverture de base du contenu de votre lien, au cas où elle cesse de fonctionner à l'avenir.
À peu près toutes les réponses nécessiteux que vous utilisiez le site code> Site CODE> qui nécessite des migrations pour fonctionner et qu'il soit ajouté à Dans mon instance, je n'ai besoin que de Afficher l'URL correcte parce que j'utilise docker et l'URL de base basée sur ma configuration Docker est avec tout ce que vous avez à faire est de définir un site et voici très simple le installé_apps code>.
code>. p>
personnalisé ( ) CODE> La classe comme je l'ai fait ci-dessous et que vous êtes prêt à partir. p>
sitetososhow code> Classe: < / p>
Avez-vous
django.contrib.sites code> actif? Si vous le faites,
sitemaps code> prendra un site actif à partir de là.
Oui Ilvar, mais je ne veux pas que les sitemaps prennent le site de là. Je voudrais spécifier mon URL de base personnelle. Maintenant retour: API.MYDOMAINE.ME/PAGE/3232 (API.MYDOMAINES.ME IT Le site actif), mais que je veux, est le suivant: Mydomain.com/page/3213 Comprenez-vous?
Oui. Vous pouvez le monkey-patch
Sites CODE> pour le faire renvoyer un faux site avec
Domaine code> dont vous avez besoin.
ILVAR: Comment? Toute astuce? Exemples?