Django站点地图框架。接受查询参数

时间:2016-12-29 14:24:17

标签: python django sitemap django-sitemaps

我正在使用Django Sitemap Framework

从我的数据库中检索文章列表没有问题。

class ArticleSitemap(Sitemap):
    def items(self):
        return articles.objects.filter(tagid=1399).order_by('-publisheddate')

我现在想接受一个查询参数来过滤输入的标签ID,即:

sitemap.xml?tagid = 1000

我还没有在文档或堆栈中找到示例。

2 个答案:

答案 0 :(得分:0)

无法从Sitemap课程访问HttpRequest对象。可能最简单的方法是为站点地图创建自己的视图,执行urls.py所需的操作,并调用Django内部视图来完成XML的最终渲染。

按照Django文档(https://github.com/gympulsr/qt-pushnotifications)设置您的站点地图网址,但请使用您自己的视图。

from my_app.sitemap_views import custom_sitemap_index, custom_sitemap_section sitemaps = { 'foo': FooSitemap, 'bar': BarSitemap, } urlpatterns = [ url(r"^sitemap\.xml$", custom_sitemap_index, {'sitemaps': sitemaps}, name='sitemap_index'), url(r"^sitemap-(?P<section>.+)\.xml$", custom_sitemap_section, {'sitemaps': sitemaps}, name='sitemaps'), # ... ]

HttpRequest

您的自定义站点地图视图是标准的Django视图:您可以访问sitemap_views.py,数据库,缓存......

import copy from django.contrib.sitemaps import views as django_sitemaps_views from django.contrib.sitemaps.views import x_robots_tag @x_robots_tag def custom_sitemap_index(request, sitemaps, template_name='sitemap_index.xml', content_type='application/xml', sitemap_url_name='django.contrib.sitemaps.views.sitemap'): print("You can access request here.", request) return django_sitemaps_views.index(request, template_name, content_type, sitemaps, sitemap_url_name) @x_robots_tag def custom_sitemap_section(request, sitemaps, section=None, template_name='sitemap.xml', content_type='application/xml'): tag_id = int(request.GET.get('tagid')) # We do not want to modify global variable "sitemaps"! # Otherwise sitemap instances would be shared across requests (tag_id should be dynamic). sitemaps_copy = copy.deepcopy(sitemaps) for section, site in sitemaps_copy.items(): if callable(site): sitemaps_copy[section] = site(tag_id=tag_id) return django_sitemaps_views.sitemap(request, sitemaps_copy, section, template_name, content_type)

sitemap.py

from django.contrib.sitemaps import Sitemap class FooSitemap(Sitemap): def __init__(self, tag_id: int): self.tag_id = tag_id super().__init__() def items(self): return articles.objects.filter(tagid=1399) \ .filter(tag_id=self.tag_id) \ .order_by('-publisheddate') class BarSitemap(Sitemap): pass # ... # ...

@Multipart
@POST("URL/uploadImages.php")
Call<Response> uploaImages(
        @Part List< MultipartBody.Part> files );

答案 1 :(得分:-1)

它在请求的Get-attribute中:

网址&#39; ... / names / getNames?pattern = Helm&#39;导致请求对象具有GET:&lt; QueryDict:{&#39; pattern&#39;:[&#39; Helm&#39;]}&gt;