UFO ET IT

Django 릴리스 1.5 : 'url'에는 비어 있지 않은 첫 번째 인수가 필요합니다.

ufoet 2020. 11. 11. 20:59
반응형

Django 릴리스 1.5 : 'url'에는 비어 있지 않은 첫 번째 인수가 필요합니다. Django 1.5에서 변경된 구문


Django 릴리스 1.5를 사용하기 시작했고 이전 코드에 문제가 있습니다.

<a href="{% url auto.views.viewpost post.slug %}"><h3>{{post.title}}</h3></a>

오류 : 'url'에는 비어 있지 않은 첫 번째 인수가 필요합니다. Django 1.5에서 변경된 구문은 문서를 참조하세요. 문서 :

주목할 가치가있는 사용되지 않는 기능 중 하나는 "새 스타일"URL 태그로의 전환입니다. Django 1.3 이전에는 {% url myview %}와 같은 구문이 잘못 해석되었습니다 (Django는 "myview"를 myview라는 템플릿 변수가 아니라 뷰의 리터럴 이름으로 간주했습니다). Django 1.3 이상은 myview가 변수로 보이는 수정 된 동작을 가져 오기 위해 {% load url from future %} 구문을 도입했습니다.

결론은 템플릿에서 {% load url from future %}를 사용하지 않는 경우 {% url myview %}와 같은 태그를 {% url "myview"%}로 변경해야한다는 것입니다. {% load url from future %}를 사용했다면 Django 1.5에서 해당 줄을 제거하면됩니다.

그런 다음 시도 <a href=“{% url ‘auto.views.view_post’ post.slug %}”><h3>{{post.title}}</h3></a>했지만 '(' ',)'인수와 키워드 인수 '{}'가있는 'auto.views.view_post'에 대해 Reverse 오류가 발생했습니다. :( 내가 뭘 잘못하고 있니? Thx!


나는이 모든 쓰레기를 손으로하는 것이 정말 싫다. 그래서 나는 나를 위해 그것을하기 위해 sed 스크립트를 썼다. 먼저 백업이 있는지 확인한 다음 템플릿 디렉토리에서 다음을 실행하십시오.

find . -type f -print0 | xargs -0 sed -i 's/{% url \([^" >][^ >]*\)/{% url "\1"/g'

모든 템플릿 파일을 살펴보고 다음을 대체합니다.

{% url something.else foo bar %}

이것으로

{% url "something.else" foo bar %}

조심하세요, 나는 이것에 약간 게으르고, 일부 구조에서 깨질 수 있습니다. 그래도 수동으로 수행하는 것보다 diff에서 오류를 찾는 것이 더 쉬울 것입니다.


.git 폴더를 제외하고 오류의 MacOS를 피하기 위해 옵션 -i ''에 빈 따옴표를 추가했습니다. 예:

find . -path '*/.git*' -prune -o -type f -print0 | xargs -0 sed -i '' 's/ url \([^" >][^ >]*\)/ url "\1"/g'

하지만이 접근 방식 (MacOS)이 마음에 듭니다.

grep '{% url' -lrZ . | xargs -0 sed -i '' 's/ url \([^" >][^ >]*\)/ url "\1"/g'

첫째, 뷰 이름에 작은 따옴표를 사용하는 것이 옳았습니다 'auto.views.view_post'.

자, 일시적으로 제거 url태그를, 그를 확인 {{ post }}하고 {{ post.slug }}당신이 기대하는 값을 제공합니다. 오류 메시지 arguments '('',)'는 이것이 post.slug문제임을 나타냅니다.


Mac OS를 사용하는 경우 -e를 전달해야합니다.

find . -type f -print0 | xargs -0 sed -i -e 's/ url \([^" >][^ >]*\)/ url "\1"/g'

이 레시피의 대부분을 사용하여 sed에서 "ILLEGAL BYTE SEQUENCE"오류가 발생했습니다.이를 먼저 수행하여 수정할 수있었습니다.

LANG=C

그러나 이러한 레시피는 내 프로젝트에서 수많은 오탐을 생성했으며 이미 작은 따옴표, 큰 따옴표 또는 인용되지 않은 URL 이름이 혼합되어 있습니다. 엉망이었습니다. 가장 깨끗한 방법은 정규식 모드에서 내 편집기 (Sublime)로 템플릿 디렉토리를 검색하는 것입니다.

\{\%\ url\ [^']
\{\%\ url\ [^"]

(아직 인용되지 않은 모든 인스턴스를 찾아서) 시각적으로 살펴보십시오. 자동화 한 다음 나중에 엉망진창을 정리하는 것보다 더 빠르고 깔끔했습니다.


당신은 또한 수행해야 할 수 있습니다 정규 표현식 교체하기 "\{% url "([\w:]+)"위해 "\{% url '$1'같은 aviod 구문 오류를 위해<a href="{% url "foo:bar" %}">baz</a>

참고 URL : https://stackoverflow.com/questions/14882491/django-release-1-5-url-requires-a-non-empty-first-argument-the-syntax-change

반응형