Python 我可以做Django';s{%url%}模板标记在作为参数传递时忽略None,因此是否将参数设置为可选?

Python 我可以做Django';s{%url%}模板标记在作为参数传递时忽略None,因此是否将参数设置为可选?,python,django,django-templates,Python,Django,Django Templates,我有一个网站的清单,我写的过滤器,以分段的清单。 所以我可以: /listings/furniture/ /listings/london/ /listings/free/ 我还可以将这些链接在一起,例如: /listings/free/furniture/ /listings/free/furniture/london/ 在为这些过滤器构建链接时,如果过滤器设置为默认值(例如everywhere或everything),我想省去它。因此,不要说例如: /listings/free/ever

我有一个网站的清单,我写的过滤器,以分段的清单。 所以我可以:

/listings/furniture/
/listings/london/
/listings/free/
我还可以将这些链接在一起,例如:

/listings/free/furniture/
/listings/free/furniture/london/
在为这些过滤器构建链接时,如果过滤器设置为默认值(例如
everywhere
everything
),我想省去它。因此,不要说例如:

/listings/free/everything/everywhere/
我只想说:

/listings/free/
我有一个
urls.py
配置,如下所示:

url(r'^listings/(?P<param1>[\w-]+)/$', 'main.web.listings'),
url(r'^listings/(?P<param1>[\w-]+)/(?P<param2>[\w-]+)/$', 'main.web.listings'),
url(r'^listings/(?P<param1>[\w-]+)/(?P<param2>[\w-]+)/(?P<param3>[\w-]+)/$', 'main.web.listings'),
这将使用当前选择的类别和位置进行链接,并将页面更改为仅显示“免费”项目

因此,对于这个问题:在模板中,我有时可以选择category_.slug,有时不选择,我希望
{%url…%}
标记在设置为
None
时忽略一个参数。默认情况下,此时它返回如下内容:

/listings/free/None/None/
在这种情况下,我想返回:

/listings/free/

有没有一种方法可以解决这个问题,或者有一种更好的方法可以解决我所缺少的问题?

我也遇到了类似的问题。我找到了一个解决方案。我使用的是Django 2.2,所以我改用了
path()

{% url 'main.web.listings' param1="free" param2=category_selected.slug param3=location_selected.slug %}
url.py

path('item/<int:item_id>/', views.show_item, name='show_item'),
path('item/<int:item_id>/<slug:slug>/', views.show_item, name='show_item'),
def show_item(request, item_id, slug=None):
show_item.html

<a href="{% url 'show_item' item_id=item.id %}{% if not item.slug is None %}{{ item.slug }}/{% endif %}">{{ item.name }}</a>

在您的情况下,答案可能如下所示:

<a href="{% url 'main.web.listings' "free" %}{% if not category_selected.slug is None %}{{ category_selected.slug }}/{% endif %}{% if not location_selected.slug is None %}{{ location_selected.slug }}/{% endif %}">Back to free item listings</a>


这与我的代码相同:
{%url'main.web.listings's“free”category\u selected.slug location\u selected.slug%}
。如果选择了
category\u selected.slug=None
location\u selected.slug=None
,那么我得到:
/listings/free/None/None/
我的目标是:
/liatings/free/
我陷入了完全相同的境地。有什么解决办法吗?
<a href="{% url 'main.web.listings' "free" %}{% if not category_selected.slug is None %}{{ category_selected.slug }}/{% endif %}{% if not location_selected.slug is None %}{{ location_selected.slug }}/{% endif %}">Back to free item listings</a>