我在谷歌上搜索了很多关于如何在模板中使用"url"标签的答案,结果发现很多回复说"你只需将其插入模板,并将其指向你想要的url视图".好吧,这对我来说没有什么乐趣:(我已经try 了所有可能的排列方式,并把在这里发帖作为最后的手段.).

所以事情就是这样了.我的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文件.我不知道这是为什么.(对我来说似乎不合适)*

推荐答案

您应该在urls.py文件中提供一个字符串,而不是导入logout_view函数:

所以不是(r'^login/', login_view),

但是(r'^login/', 'login.views.login_view'),

这是做事的标准方式.然后,您可以使用以下方式访问模板中的URL:

{% url login.views.login_view %}

Django相关问答推荐

Django、htmx删除记录并更新

Django-将html数据保存到quillfield中

使用自定义模型注册后,Django无法登录

Django Form标签和action属性

如何在Django REST框架中实现ForeignKey搜索

在 django 中使用自定义 url 转换器传递 url 参数

如果一个应用程序有多个具有相同字段的模型,那么保持 DRY 的最佳实践是什么?

相同的字符串不同的翻译

如何让 Django 在模板更改时重新启动运行服务器?

Django中的 联合(Union) 和相交(Intersect)

遍历django模板中的外键相关表

Django - 将 HTML 输出转换为变量

何时在 django 中使用 pre_save、save、post_save?

如何从不是 django 元素文件夹的文件夹中运行 gunicorn

Django - 如何在其管理模块中访问模型的详细名称?

将现有 auth.User 数据迁移到新的 Django 1.5 自定义用户模型?

Django:将原始html(来自数据库)显示为html,而不是呈现

如何找到两个 Django 查询集的交集?

如何测试 Django QuerySets 是否相等?

Django 将多个模型传递给一个模板