[django] {% URL 사용 ??? 장고 템플릿의 %}

나는 google에서 템플릿에서 ‘url’태그를 사용하는 방법에 대한 답변을 많이 보았고 ‘템플릿에 삽입하고 URL을 원하는보기를 가리킬뿐’이라는 많은 응답을 찾았습니다. 나에게는 기쁨이 없습니다 🙁 나는 가능한 모든 순열을 시도했으며 마지막 수단으로 여기에 게시하는 데 의지했습니다.

여기 있습니다. 내 urls.py는 다음과 같습니다.

from django.conf.urls.defaults import *
from login.views import *
from mainapp.views import *
import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Example:
    # (r'^weclaim/', include('weclaim.foo.urls')),
    (r'^login/', login_view),
    (r'^logout/', logout_view),
    ('^$', main_view),

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
    # to INSTALLED_APPS to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)),
    #(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/home/arthur/Software/django/weclaim/templates/static'}),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
)

내 ‘login’디렉토리의 ‘views.py’는 다음과 같습니다.

from django.shortcuts import render_to_response, redirect
from django.template import RequestContext
from django.contrib import auth

def login_view(request):
    if request.method == 'POST':
        uname = request.POST.get('username', '')
        psword = request.POST.get('password', '')
        user = auth.authenticate(username=uname, password=psword)
        # if the user logs in and is active
        if user is not None and user.is_active:
            auth.login(request, user)
            return render_to_response('main/main.html', {}, context_instance=RequestContext(request))
            #return redirect(main_view)
        else:
            return render_to_response('loginpage.html', {'box_width': '402', 'login_failed': '1',}, context_instance=RequestContext(request))
    else:
        return render_to_response('loginpage.html', {'box_width': '400',}, context_instance=RequestContext(request))

def logout_view(request):
    auth.logout(request)
    return render_to_response('loginpage.html', {'box_width': '402', 'logged_out': '1',}, context_instance=RequestContext(request))

마지막으로 login_view가 가리키는 main.html은 다음과 같습니다.

<html>
<body>
test! <a href="{% url logout_view %}">logout</a>
</body>
</html>

그렇다면 왜 매번 ‘NoReverseMatch’가 발생합니까?

* (약간 다른 메모에서 모든 render-to-response 끝에 ‘context_instance = RequestContext (request)’를 사용해야했습니다. 그렇지 않으면 템플릿에서 {{MEDIA_URL}}을 인식하지 못해 참조 할 수 없기 때문입니다. 모든 css 또는 js 파일. 왜 그런지 잘 모르겠습니다. 나에게 옳지 않은 것 같습니다.) *



답변

logout_view함수 를 가져 오는 대신 urls.py파일에 문자열을 제공해야 합니다.

그래서 아닙니다 (r'^login/', login_view),

그러나 (r'^login/', 'login.views.login_view'),

그것이 일을하는 표준 방법입니다. 그런 다음 다음을 사용하여 템플릿의 URL에 액세스 할 수 있습니다.

{% url login.views.login_view %}


답변

선택한 답변이 오래되어 다른 사람이 나를 위해 일하지 않았습니다 (Django 1.6 및 [거의] 등록 된 네임 스페이스가 없습니다.)

Django 1.5 이상의 경우 ( 문서에서 )

경고
함수 경로 또는 패턴 이름을 따옴표로 묶는 것을 잊지 마십시오!

명명 된 URL로 다음을 수행 할 수 있습니다.

(r'^login/', login_view, name='login'),
...
<a href="{% url 'login' %}">logout</a>

보기가 다른 매개 변수를 사용하는 것처럼 쉽습니다.

def login(request, extra_param):
...
<a href="{% url 'login' 'some_string_containing_relevant_data' %}">login</a>


답변

URL 이름을 따옴표로 묶었는지 확인하고 (django 1.5 이상) URL에 매개 변수가 있으면 따옴표 밖에 있어야 합니다 (이 실수를 알아내는 데 몇 시간을 보냈습니다!).

{% url 'namespace:view_name' arg1=value1 arg2=value2 as the_url %}
<a href="{{ the_url }}"> link_name </a>


답변

url템플릿 태그 문자열뿐만 아니라 기능에 참조로서 매개 변수를 전달한다 reverse(). 이 작업을 수행하는 가장 간단한 방법 name은보기에를 추가하는 것입니다.

url(r'^/logout/' , logout_view, name='logout_view')


답변

나는 같은 문제에 봉착했다.

문서에서 찾은 것은 네임 스페이스를 사용해야합니다.

당신의 경우 {% url login:login_view %}


답변

당신의 모범으로 판단 {% url myproject.login.views.login_view %}하면 이야기의 끝 이 아니어야 합니까? ( myproject실제 프로젝트 이름으로 대체 )


답변