Nice programing

인수 '()'및 키워드 인수 '{}'가있는 '*'에 대한 반전을 찾을 수 없습니다.

nicepro 2020. 12. 4. 20:36
반응형

인수 '()'및 키워드 인수 '{}'가있는 '*'에 대한 반전을 찾을 수 없습니다.


렌더링하는 동안 예외가 발생했습니다.

인수 '()'및 키워드 인수 '{}'이 (가)있는 'products.views.'filter_by_led'의 역방향을 찾을 수 없습니다.

products.views.filter_by_led셸에서 성공적으로 가져올 수 있었고 경로가 정확해야합니다.

다음은 urls.py입니다.

(r'^led-tv/$', filter_by_led ),

오류가 생성되는 위치입니다.

href="{% url products.views.filter_by_led %}">

동일한 파일에서 제대로 작동하기 때문에 이해할 수 없습니다.

{% url products.views.lcd_screen_size screen_size=50 %}

다음은 함수 정의입니다.

def filter_by_led(request):

Django가 함수가 해당 함수에 대한 Reverse를 찾을 수 없다고 생각하는 이유를 이해할 수 없습니다.

모든 *.pyc파일을 삭제하고 Apache를 다시 시작했습니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?


머릿속에서 생각할 수있는 세 가지가 있습니다.

  1. 이름이 지정된 URL을 사용 했습니다. 어쨌든 더 강력하고 유지 관리가 쉽습니다.
  2. django.core.urlresolvers.reverse더 나은 오류를 위해 명령 줄에서 사용해보십시오.

    >>> from django.core.urlresolvers import reverse
    >>> reverse('products.views.filter_by_led')
    
  3. 해당보기를 가리키는 URL이 두 개 이상 있는지 확인하세요.


역방향 쉘 호출 (위에서 언급했듯이)은 이러한 문제를 디버그하는 데 매우 좋지만 두 가지 중요한 조건이 있습니다.

  • 당신이 있어야 한다는 인수를 제공 일치 어떤 인수 뷰 요구
  • 이러한 인수 는 정규 표현식 패턴과 일치해야합니다.

예, 논리적입니다. 예, 역방향 은 예외 만 throw하고 더 이상 힌트를 제공하지 않기 때문에 혼란 스럽습니다 .

URL 패턴의 예 :

url(r'^cookies/(?P<hostname>[^/]+)/(?P<url_id>\d+)/$', 'register_site.views.show_cookies', name='show_cookies'),

그리고 쉘에서 일어나는 일 :

>>> from register_site.views import show_cookies
>>> reverse(show_cookies)
NoReverseMatch: Reverse for 'register_site.views.show_cookies' with arguments '()' and keyword arguments '{}' not found.

내가 인수를 제공하지 않았기 때문에 작동하지 않습니다.

>>> reverse('show_cookies', kwargs={'url_id':123,'hostname': 'aaa'})
'/cookies/aaa/123'

이제 효과가 있었지만 ...

>>> reverse('show_cookies', kwargs={'url_id':'x','hostname': 'www.dupa.com'})
NoReverseMatch: Reverse for 'show_cookies' with arguments '()' and keyword arguments '{'url_id': 'x', 'hostname': 'www.dupa.com'}' not found.

이제 url_id 가 정규 표현식 (예상 숫자, 제공된 문자열)과 일치하지 않았기 때문에 작동 하지 않았습니다.

위치 인수와 키워드 인수 모두에 reverse사용할 수 있습니다 . 구문은 다음과 같습니다.

reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)

URL 템플릿 태그에 관해서는 재미있는 점이 있습니다. Django 문서 는 인용 된 뷰 이름을 사용하는 예를 제공합니다.

{% url 'news.views.year_archive'yearvar %}

그래서 HTML 템플릿에서 비슷한 방식으로 사용했습니다.

{% url 'show_cookies'hostname = u.hostname url_id = u.pk %}

그러나 이것은 나를 위해 작동하지 않았습니다. 그러나 예외 메시지는 무엇이 잘못되었을 수 있는지에 대한 힌트를주었습니다. 뷰 이름 주위에 큰 따옴표가 있습니다.

인수가있는 ''show_cookies ''의 반대 ...

따옴표를 제거 했을 때 작동하기 시작했습니다 .

{% url show_cookies hostname = u.hostname url_id = u.pk %}

그리고이 되어 혼란.


보기 이름을 작은 따옴표로 묶어야합니다.

{% url 'viewname' %}

대신에

{% url viewname %}

비슷한 문제가 있었고 해결책은 '$'(문자열 끝) 문자를 올바르게 사용하는 것입니다.

내 기본 url.py는 다음과 같습니다 ($ 문자에 유의하십시오).

urlpatterns = [
url(r'^admin/', include(admin.site.urls )),
url(r'^$', include('card_purchase.urls' )),
]

내 card_purchases 앱에 대한 내 url.py는 다음과 같이 말했습니다.

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^purchase/$', views.purchase_detail, name='purchase')
]

나는 '$'를 두 번 사용했습니다. 따라서 간단한 변경이 작동했습니다.

urlpatterns = [
url(r'^admin/', include(admin.site.urls )),
url(r'^cp/', include('card_purchase.urls' )),
]

두 번째 URL의 변경 사항을 확인하십시오! 내 card_purchases 앱의 url.py는 다음과 같습니다.

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^purchase/$', views.purchase_detail, name='purchase')
]

이 외에도 이름이 지정된 URL 주변의 따옴표가 중요하다는 것을 확인할 수 있습니다!


누군가에게 도움이되는 경우 비슷한 문제가 있었고 오류는 두 가지 이유 때문입니다.

  1. Not using the app's namespace before the url name

    {% url 'app_name:url_name' %}
    
  2. Missing single quotes around the url name (as pointed out here by Charlie)


{% url 'polls:create' poll.id %}

I don't think you need the trailing slash in the URL entry. Ie, put this instead:

(r'^led-tv$', filter_by_led ),

This is assuming you have trailing slashes enabled, which is the default.

참고URL : https://stackoverflow.com/questions/1842389/reverse-for-with-arguments-and-keyword-arguments-not-found

반응형