【问题标题】:Django Redirect treating view as a URLDjango Redirect 将视图视为 URL
【发布时间】:2016-01-07 07:32:05
【问题描述】:

由于某种原因,Redirect 认为我对视图“clients.views.teacher_profile”的调用是一个 URL,将其直接放在地址栏中,如图所示:

Page Not Found Screenshot

如何将其链接到视图而不将其视为 URL?

注意:我已经更改了一些设置以适应 django-allauth。

我的代码:

#views.py
def teacher_profile(request, username):
    user = get_object_or_404(User, username=username)
    context = {
        'user':user,
        'teacher':user.teacher,
    }
    return render(request, 'clients/teacher_profile.html', context)

def edit_profile(request):
    teacher = get_object_or_404(Teacher, user=request.user)
    if request.method == 'POST':
        form = TeacherForm(request.POST, instance=teacher)
        if form.is_valid():
            teacher = form.save(commit=False)
            teacher.user = request.user
            teacher.save()
            return redirect('clients.views.teacher_profile', username=request.user.username)
    else:
        form = TeacherForm(instance=teacher)
    return render(request, 'clients/edit_profile.html', {'form':form})

#urls.py
urlpatterns = [
    url(r'^list/$', views.teacher_list, name='teacher_list'),
    url(r'^(?P<username>[\w.@+-]+)/$', views.teacher_profile, name='teacher_profile'),
    url(r'^accounts/settings/$', views.edit_profile, name='edit_profile'),
]

【问题讨论】:

    标签: django url redirect view


    【解决方案1】:

    不要在重定向调用中使用视图的模块路径;使用您在 url 模式中明确定义的名称。

    return redirect('teacher_profile', username=request.user.username)
    

    【讨论】:

    • 感谢您的回复!我按照你的建议做了,但发生了以下错误:NoReverseMatch at /accounts/settings/ Reverse for 'teacher_profile' with arguments '()' and keyword arguments '{'username': 'test6'}' not found。尝试了 0 个模式:[]
    • 您是否将 urls.py 包含在主名称空间的名称空间中?
    • 是的,我尝试输入“clients:teacher_profile”,现在可以了!不敢相信我错过了,还是个初学者,你看。非常感谢丹尼尔!
    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 2016-12-27
    • 2016-03-02
    • 2017-11-11
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多