【发布时间】:2011-06-03 17:17:45
【问题描述】:
我在 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}),
)
我的“登录”目录中的“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 文件。我不确定这是为什么。我觉得不对)*
【问题讨论】:
-
您所说的
context_instance=RequestContext(request)是正确的,这是允许模板访问提供给所有模板的上下文变量所必需的。默认情况下,所有通用视图都会这样做,但您需要在自定义视图中自己完成。 -
对我来说似乎有点奇怪,因为您将一直从模板访问您的 css 和 js 文件,以保持整个站点的一致性。因此,您不应该默认访问 {{ MEDIA_URL }} 吗?
-
此处接受的答案不再有效
-
添加一个新答案,然后我会接受
标签: django django-templates django-urls