14

私はかなり意味のある URL を作成しようとしていますが、間違っていると思います。

これは機能します:

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

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

これはしません:

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'),
)

このエラーが発生すると:

引数 '()' とキーワード引数 '{}' を持つ 'explore' の逆が見つかりません。

explore_view のコードは次のとおりです。

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))
4

3 に答える 3

17

この行:

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

countryorcategory...テンプレートで引数を取る URL を定義しています。テンプレートの次のいずれかの URL に引数を付ける必要があります。

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

同じ名前で引数のない URL を引き続き使用する場合は、同じ名前で異なるパターンの追加の URL を定義できます。例えば:

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

次に{% url 'explore' %}、引数の有無にかかわらず動作するはずです。

于 2013-04-30T12:20:39.900 に答える
5

私にとっては、ルートの名前空間を忘れていました。それ以外の

{% url 'login' %}

書くべきだった

{% url 'accounts:login' %}

この構成では:

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

# accounts URLs
url(r'^login$', views.login, name='login')
于 2016-07-22T16:24:21.777 に答える
1

次のようなテンプレートを使用していると仮定しています。

 {% url 'explore' argument %}

そして、このエラーはおそらくargumentが何も設定されていないことを意味します。

于 2013-04-30T11:35:06.473 に答える