2017-11-30 4 views
0

Wir haben vor kurzem von Django aktualisiert 1,9-1,10 und nun folgendes Problem aufgetaucht:Django 'url' Template-Tag entkommt falsch auf das Fragezeichen

urls.py:

url(r'^search/(?:\?q=(?P<q>[^&]*))?$', views.search, {'q': ''}, name='search'), 

Vorlage:

<a href="{% url 'issues:search' "foobar" %}">Issues</a> 

Mit Django 1,9, war das Ergebnis

https://127.0.0.1/issues/search/?q=foobar 

Da Django 1.10, ergibt sich die folgende URL:

https://127.0.0.1/issues/search/%3Fq=foobar 

Als Ergebnis Links, die Abfrageparameter enthalten nicht mehr funktionieren. Wie kann dies gemacht werden, um mit Django 1.10 zu arbeiten?

+0

'% 3F' ist die hexadezimale ASCII Darstellungen entkam für'? ' – scharette

+0

Natürlich, aber es war, bevor Django 1.10 nicht entgangen. – knipknap

Antwort

1

Django-URL-Muster enthalten keine Querystring-Parameter, und dies ist seit 1.10 nicht neu, war aber schon immer der Fall. Sie sollten es nicht in das Muster einfügen und es separat in den Link selbst einfügen.

url(r'^search/$', views.search, name='search'), 

...

<a href="{% url 'issues:search' %}?q=foobar"> 
+0

Danke, ich bin sicher, dass es funktionieren wird. Für den Datensatz jedoch: Das Muster respektiert, dass Abfrage-Variablen nicht Teil der Zeichenfolge sind (die gesamte Abfrage ist optional markiert). Der Grund, warum wir es spezifiziert haben, war genau das "reverse()" zu machen, und es hat mit früheren Versionen von Django funktioniert. – knipknap

Verwandte Themen