python - 通用详细信息 View ProfileView必须使用对象pk或子弹调用

标签 python django

我是Django 2.0的新手,在访问我的个人资料页面 View 时遇到此错误。它正在使用像path('users/<int:id>')这样的URL,但是我想像path('<username>')这样的URL。不知道到底是什么问题。希望您能提供帮助。

#views.py
class ProfileView(views.LoginRequiredMixin, generic.DetailView):
    model = models.User
    template_name = 'accounts/profile.html'


#urls.py
urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
    path('signup', SignUpView.as_view(), name='signup'),
    path('login', LoginView.as_view(), name='login'),
    path('logout', logout_view, name='logout'),
    path('<username>', ProfileView.as_view(), name='profile')
]


#base.html
<ul class="dropdown-menu">
    <li><a href="{% url 'accounts:profile' user.username %}">View Profile</a></li>
    <li><a href="#">Edit Profile</a></li>
</ul>

最佳答案

您需要告诉您的 View 使用username作为查找字段。您可以通过在模型上定义slug_fieldslug_url_kwarg或重写get_object来做到这一点。例如:

class ProfileView(views.LoginRequiredMixin, generic.DetailView):
    model = models.User
    template_name = 'accounts/profile.html'
    slug_field = 'username'
    slug_url_kwarg = 'username'

其中的第一个确定在模型查找中使用哪个字段。第二个参数根据URL模式确定要使用的变量。

关于python - 通用详细信息 View ProfileView必须使用对象pk或子弹调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497771/

相关文章:

python - 将字典值添加到列表中,这是字典的值

python - Altair slider 变换数据

python - Django:通过 send_mass_mail() 发送 HTML 电子邮件

python - 用逗号格式化数字以在 Python 中分隔千位

python3.2 使用 subprocess.popen - 需要格式化生成的标准输出以写入文件

python args 变量不适用于 parser.parse_args

django - 无法查询 "": Must be "" instance

django - 我应该将 wtforms 与 Pylons 一起使用吗?

Django:如何过滤并获取包含所有搜索关键字的结果

python - Django 1.7 - 找不到教程