django的附加xml站点地图功能
django-qartez的Python项目详细描述
此应用程序旨在为django提供缺少的xml sitemapsf。目前 实现了以下XML站点地图:
- qartez.sitemaps.imagessitemap:根据specs的xml图像站点地图。
- qartez.sitemaps.staticsitemap:用于服务页面的站点地图。添加命名 站点地图的模式或url,以便将其很好地显示在单独的 服务XML站点地图。
- qartez.sitemaps.relalternatehreflangsitemap:站点地图:rel=“备用” hreflang=“x”实现。阅读specs。
先决条件
- django:1.8、1.9、1.10、1.11
- Python:2.7、3.4、3.5、3.6
安装
一。安装
pypi上的最新稳定版本:
pip install django-qartez
BitBucket的最新稳定版本:
pip install -e hg+http://bitbucket.org/barseghyanartur/django-qartez@stable#egg=django-qartez
来自Github的最新稳定版本:
pip install -e git+https://github.com/barseghyanartur/django-qartez@stable#egg=django-qartez
2.将qartez添加到已安装的应用程序中
INSTALLED_APPS=(# ...'django.contrib.sitemaps','qartez',# ...)
用法和示例
我们有一个虚拟的foo应用程序。
下面示例的完整源代码here(请参见 示例目录)。
foo/sitemap.py
fromdjango.contrib.sitemapsimportSitemapfromqartez.sitemapsimport(ImagesSitemap,StaticSitemap,RelAlternateHreflangSitemap)fromfoo.modelsimportFooItem# ---------------------- XML images sitemap part ---------------------------# Dictionary to feed to the images sitemap.foo_item_images_info_dict={# Base queryset to iterate when procuding a site map'queryset':FooItem._default_manager.exclude(image=None),'image_location_field':'image_url',# Image location (URL)'image_title_field':'title',# Image title# An absolute URL of the page where image is shown'location_field':'get_absolute_url'}# XML images sitemap.foo_item_images_sitemap={'foo_item_images':ImagesSitemap(foo_item_images_info_dict,priority=0.6),}# ---------------------- Static sitemap part ---------------------------# Sitemap for service pages like welcome and feedback.foo_static_sitemap=StaticSitemap(priority=0.1,changefreq='never')foo_static_sitemap.add_named_pattern('foo.welcome')foo_static_sitemap.add_named_pattern('foo.contact')# ---------------------- Normal sitemap part ---------------------------# Normal Foo items sitemap.classFooItemSitemap(Sitemap):changefreq="weekly"priority=1.0deflocation(self,obj):returnobj.get_absolute_url()deflastmod(self,obj):returnobj.date_publisheddefitems(self):returnFooItem._default_manager.all()# ---------------------- Alternate hreflang sitemap part ---------------# Alternate hreflang sitemap.classArticleSitemap(RelAlternateHreflangSitemap):# If you want to serve the links on HTTPS.protocol='https'defalternate_hreflangs(self,obj):return[('en-us',obj.alternative_object_url),]defitems(self):returnFooItem._default_manager.all()
url.py
fromfoo.sitemapimportfoo_item_images_sitemap,foo_static_sitemapfromfoo.sitemapimportFooItemAlternateHreflangSitemap,FooItemSitemapsitemaps={'foo-items':FooItemSitemap,'foo-items-alternate-hreflang':FooItemAlternateHreflangSitemap,'foo-static':foo_static_sitemap}urlpatterns=patterns('',# Sitemaps(r'^sitemap\.xml$','django.contrib.sitemaps.views.index', \ {'sitemaps':sitemaps}),(r'^sitemap-foo-images\.xml$','qartez.views.render_images_sitemap', \ {'sitemaps':foo_item_images_sitemap}),)
注意,有必要添加 “模板名称”:“qartez/rel_alternate_hreflang_sitemap.xml” 只有在您要使用qartez.RelAlternateHreflangSitemap的情况下。
(r'^sitemap-(?P<section>.+)\.xml$','django.contrib.sitemaps.views.sitemap',{'sitemaps':sitemaps,'template_name':'qartez/rel_alternate_hreflang_sitemap.xml'}),
为了更好地了解 示例,请参见下面的代码部分。
foo/models.py
classFooItem(models.Model):title=models.CharField(_("Title"),max_length=100)slug=models.SlugField(_("Slug"),unique=True)body=models.TextField(_("Body"))date_published=models.DateTimeField(_("Date published"),blank=True,null=True,default=datetime.datetime.now())# Image to be used for XML images sitemap.image=models.ImageField(_("Headline image"),blank=True,null=True,upload_to='foo-images')# URL to be used for alternative hreflang attribute.alternative_url=models.URLField(_("Alternative URL"),blank=True,null=True)classMeta:verbose_name=_("Foo item")verbose_name_plural=_("Foo items")def__unicode__(self):returnself.titledefget_absolute_url(self):kwargs={'slug':self.slug}returnreverse('foo.detail',kwargs=kwargs)# Shortcut to full image URL for XML images sitemap.defimage_url(self):returnself.image.urlifself.imageelse''
foo/views.py
# Service welcome pagedefwelcome(request,template_name='foo/welcome.html'):context={}returnrender_to_response(template_name,context, \ context_instance=RequestContext(request))# Service contact pagedefcontact(request,template_name='foo/contact.html'):context={}returnrender_to_response(template_name,context, \ context_instance=RequestContext(request))
foo/url.py
urlpatterns=patterns('foo.views',# ...# Contact URLurl(r'^contact/$',view='contact',name='foo.contact'),# ...# Welcome URLurl(r'^welcome/$',view='welcome',name='foo.welcome'),# ...)
许可证
gpl 2.0/lgpl 2.1
支架
如有任何问题,请通过Author部分中提供的电子邮件与我联系。