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部分中提供的电子邮件与我联系。

作者

艺术酒吧<;artur.barseghyan@gmail.com>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
空字符串检查在java中未按预期工作   JavaSpringWebClient:自动计算主体的HMAC签名并将其作为头传递   foreach是否有一个Java等效的foreach循环和一个引用变量?   java如何在Eclipse中导入jar   使用特定第三方或java时lombok触发错误。*方法或构造函数   安卓 java将对象数组转换为int数组   java使一定百分比的JUnit测试通过   java Android:将Seekbar的一个值与另一个值进行比较   java将int数组(图像数据)写入文件的最佳方式是什么   java取代了系统。yml的构造函数内的getProperty   sqlite Java将公钥和私钥转换为字符串,然后再转换回字符串   安卓获取白色像素并将其保存到java opencv中的数组中   java为什么是ServerSocket。setSocketFactory静态?   Java数组似乎在不直接修改的情况下更改值