django 확장 {% url ??? %} 장고 템플릿




장고 render (5)

귀하의 예를 볼 때, {% url myproject.login.views.login_view %} 와 이야기의 끝이되어서는 안됩니까? ( myproject 를 실제 프로젝트 이름으로 대체하십시오)

나는 템플릿에 'url'태그를 사용하는 방법에 대한 답변을 Google에서 많이 보았습니다. '템플릿에 템플릿을 삽입하고 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'를받는 이유는 무엇입니까?

* 내 렌더링 - 응답의 끝 부분에서 'context_instance = RequestContext (request)'를 사용해야했던 약간 다른 메모에서 템플릿에 {{MEDIA_URL}}이 인식되지 않아 참조 할 수 없었기 때문에 모든 CSS 또는 js 파일. 왜 그런지 모르겠습니다. 나에게 맞는 것 같지 않습니다.) *


(django 1.5 이상)에서 URL 이름을 따옴표로 묶으십시오. URL에 매개 변수가 있으면 따옴표 밖에 있어야합니다 (나는이 실수를 알기 몇 시간을 보냈습니다!).

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

나는 같은 문제에 부딪친 다.

문서에서 찾은 것, 우리는 namedspace를 사용해야합니다.

귀하의 경우 {% url login:login_view %}


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

그래서 (r'^login/', login_view),

하지만 (r'^login/', 'login.views.login_view'),

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

{% url login.views.login_view %}

url 템플릿 태그는 매개 변수를 문자열로 전달하며 reverse() 대한 함수 참조는 전달하지 않습니다. 이 작업을 수행하는 가장 간단한 방법은 뷰에 name 을 추가하는 것입니다.

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




django-urls