2016-07-29 1 views
1

Ich habe in meinem Test:Django urlresolvers.reverse funktioniert nicht für "|" innerhalb nicht-einfangende Gruppe

url = reverse('record-list') 

für meinen Dienst/urls.py:

urlpatterns = [ 
    url(r'^records/?$', RecordList.as_view(), name='record-list'), 
... 

, die auch in meinem Projekt urls.py mit geladen wird:

for app in apps['apps']: 
    try: 
     _module = import_module('%s.urls' % app) 
    except: 
     if settings.DEBUG: 
      raise 
     else: 
      pass 
    else: 
     urlpatterns += [url(r'^api/%s(?:/|/?$)' % app, include('%s.urls' % app))] 

und bekommen die Fehler

django.core.urlresolvers.NoReverseMatch: Reverse for 'record-list' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['api/service(?:/|/?$)records/?$'] 

Warum schlägt die Erfassungsgruppe in der Mitte der URL reverse fehl?

+0

reverse ('record-list') - kein Parameter senden, (:/|/$?) Ein Parameter notwendig. – Igor

+0

Es ist eine nicht einfangende Gruppe, so dass keine Parameter benötigt werden –

+0

ohne (?:/| /? $) App funktioniert? – Igor

Antwort

1

Dies tritt auf, weil der Regex-Parser für reverse einfach | Symbole innerhalb der Regex nicht verarbeiten kann. Es wurde noch nicht implementiert. Siehe

https://github.com/django/django/blob/stable/1.9.x/django/utils/regex_helper.py#L98

+2

Dieser Kommentar ist ein bisschen irreführend. Es gibt einen guten Grund, warum dies nicht getan wurde: eine Auswahl gegeben gültige Gruppen, die man in einem Reverse Call wählen sollte? –

+0

Guter Punkt. Ich habe auf jeden Fall einen Workaround gefunden! Danke! –