2013-04-30 13 views
7

Oldukça anlamlı URL'ler yapmaya çalışıyorum, ama sanırım yanlış yapıyorum.NoReverseMatch at/

Bu çalışır:

from django.conf.urls.defaults import patterns, url 
from places.views import explore_view 

urlpatterns = patterns('', 
    url(r'', explore_view, name='explore'), 
) 

Bu değildir:

from django.conf.urls.defaults import patterns, url 
from places.views import explore_view 

urlpatterns = patterns('', 
    url(r'(?P<countryorcategory>[0-9A-Za-z._%+-]+)', explore_view, name='explore'), 
) 

bu hatayı alıyorum gibi:

def explore_view(request, countryorcategory=None): 
    """ 
    This is the explore view - to view places sugeested by ambassadors 
    """ 
    user = request.user 
    page = request.GET.get("page", 1) 
    per_page = request.GET.get("per_page", 20) 
    category_id = request.GET.get("category_id", None) 

    attrs = request.GET 
    lat = safe_attr(attrs, "lat", "float", None) 
    lon = safe_attr(attrs, "lon", "float", None) 
    q = request.GET.get('q', None) 

    if q and not lat or lon: 
     cache_key = 'GoogleGeocode-{}'.format(hashlib.md5(q.encode('UTF-8', 'replace')).hexdigest()) 
     latlon = cache.get(cache_key) 
     if not latlon: 
      latlon = geocode(q) 
      if latlon: 
       cache.set(cache_key, latlon) 
     if latlon: 
      lat = latlon['lat'] 
      lon = latlon['lng'] 

    if not q: 
     q = '' 

    category_names = getattr(settings, "EXPLORE_CATEGORIES", []) 
    categories = [Category.objects.get(name=cat_name).serialize() for cat_name in category_names] 

    more = True 
    places = Place.objects.explore_places(user, category_id=category_id, lat=lat, lon=lon, page=page, per_page=20) 

    if len(places) != per_page: 
     more = False 

    return render_to_response('explore/main.html', {'places': places, 'categories': categories, 'category_id': category_id, 'lat': lat, 'lon': lon, 'more': more, 'q': q}, RequestContext(request)) 
: Burada

Reverse for 'explore' with arguments '()' and keyword arguments '{}' not found.

explore_view kodudur

{% url 'explore' argument %} 

Ve bu hata muhtemelen argument şey ayarlı olmadığı anlamına gelir:

+1

Yazı şablonu main.html. –

cevap

11

Bu hat:

url(r'(?P<countryorcategory>[0-9A-Za-z._%+-]+)', explore_view, name='explore') 

... şablonunda bir argüman countryorcategory götüren bir url tanımlıyor. Aynı ada sahip olmayan argüman URL'ler kullanmaya devam etmek isterseniz, aynı adla ek adresler tanımlayabilirsiniz

{% url 'explore' argument %} 
{% url 'explore' countryorcategory=argument %} 

: Eğer şablonda url üzerinde aşağıdakilerden birini bir tartışmayı koymak gerekir ancak farklı desenlerde. Örneğin:

urlpatterns = patterns('', 
    url(r'(?P<countryorcategory>[0-9A-Za-z._%+-]+)', explore_view, name='explore'), 
    url(r'', explore_view, name='explore'), 
) 

Sonra {% url 'explore' %} ile ve bir bağımsız değişken olmadan hem çalışmalıdır.

1

Ben böyle bir şey ile bir şablon kullanıyorsunuz varsayıyorum.

1

Benim için Rotanın ad alanını unuttum. Bunun yerine

{% url 'login' %} 

I bu yapılandırmayla

{% url 'accounts:login' %} 

yazdım olmalıdır:

# root URLs 
url(r'^accounts/', include('myproject.accounts.accounts.urls', namespace='accounts')) 

# accounts URLs 
url(r'^login$', views.login, name='login') 
İlgili konular