在Django模板中使用{% url ??? %}

12 浏览
0 Comments

在Django模板中使用{% 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.*)$', 'django.views.static.serve',{'document_root': '/home/arthur/Software/django/weclaim/templates/static'}),
    (r'^static/(?P.*)$', '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文件内容如下:



test! logout


那么为什么我每次都会得到'NoReverseMatch'的错误?

(稍微说一下,我不得不在所有的render_to_response末尾使用'context_instance=RequestContext(request)',因为否则它无法识别我的模板中的{{ MEDIA_URL }},我无法引用任何css或js文件。我对此不太确定为什么。这对我来说似乎不对。)

0