【问题标题】:Django Getting this error with UpdateView: NoReverseMatch at /user/2/editDjango 使用 UpdateView 出现此错误:/user/2/edit 处的 NoReverseMatch
【发布时间】:2018-02-19 02:00:11
【问题描述】:

我有一个更新视图供用户更新他们的个人资料。但是我不断收到此错误:

NoReverseMatch at /user/2/edit
Reverse for 'user_profile' with no arguments not found. 1 pattern(s) tried: ['user/(?P<pk>\\d+)/$']

我尝试过的所有方法都不起作用(添加 pk 等)。

更新视图:

class UserEditProfileView(LoginRequiredMixin,UpdateView):
    login_url = '/login/'
    model = UserProfile
    fields = [
            'first_name',
            'profile_pic',
            'location',
            'title',
            'user_type',
            'website',
            'about',
            'twitter',
            'dribbble',
            'github'
            ]
    template_name_suffix = '_edit_form'
    success_url = reverse_lazy('users:user_profile')

应用网址:

from django.conf.urls import url
from users import views

app_name = 'users'

urlpatterns = [
    url(r'^$',views.UserListView.as_view(),name='user_list'),
    url(r'^(?P<pk>\d+)/$',views.detailprofile,name='user_profile'),
    url(r'^(?P<pk>\d+)/edit$',views.UserEditProfileView.as_view(),name='user_profile_edit'),
    url(r'^login/$',views.user_login,name='user_login'),
    url(r'^logout/$',views.user_logout,name='user_logout'),
    url(r'^register/$',views.register,name='register'),
]

编辑个人资料模板:

{% extends "users/base.html" %}

{% block content %}

    <div class="form-base">
        <h2>Edit Profile</h2>
        <form method="POST">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="Save" />
        </form>
</div>

{% endblock %}

如果您需要查看其他内容,请告诉我。

【问题讨论】:

    标签: django django-views django-urls


    【解决方案1】:

    您还需要在user_profile中提供pk

    class UserEditProfileView(LoginRequiredMixin,UpdateView):
        login_url = '/login/'
        model = UserProfile
        fields = [
            'first_name',
            'profile_pic',
            'location',
            'title',
            'user_type',
            'website',
            'about',
            'twitter',
            'dribbble',
            'github'
            ]
        template_name_suffix = '_edit_form'
    
        def get_success_url(self):
            userid = self.kwargs['pk']
            return reverse_lazy('users:user_profile', kwargs={'pk': userid})
    

    【讨论】:

    • 这就是我尝试过的,但它给了我一个名称错误:NameError: name 'pk' is not defined
    • 那行得通,所以我只需要使用get_success_url 方法来建立pk并返回它。谢谢。
    • 是的,你只需要传递pk 并收集pk 那个函数。
    • 如果它解决了您的目的,请点赞并选择我的答案。感谢合作。
    猜你喜欢
    • 2017-07-27
    • 2020-02-27
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多