【问题标题】:get_absolute_url with parameters带参数的 get_absolute_url
【发布时间】:2016-09-19 14:13:57
【问题描述】:

我的urls.py

urlpatterns = [
        ...
        url(r'^profile/$', profile.profile, name='profile'),
]

我的model

class Reg(models.Model):
    name = models.CharField(max_length=32, primary_key=True)
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, 
        related_name='%(app_label)s_%(class)s_reg', null=True)
    ...

    def get_absolute_url(self):
        return reverse('core:profile', ???)

我的views

@login_required
def profile(request):
    context_dict = {}
    u = User.objects.get(username=request.user)
    context_dict['user'] = u
    r = reg.Reg.objects.get(user=u)
    context_dict['reg'] = r
    return render(request, 'core/reg.html', context_dict)

是否可以使用 get_absolute_url 来查看不同的个人资料?例如,当您从 /admin 中查看个人资料“John”时,单击“现场查看”并获取包含 john 数据的个人资料页面,而不是您的

【问题讨论】:

  • 你会用什么来查询 John 的数据、id 或 name?或者您可以使用模型中的更多字段更新您的问题
  • 我可以同时使用这两个.... 编辑:现在我要更新了。完成。
  • 目前,您向我们展示的 URL 或视图都没有任何规定可以查看您登录时以外的任何用户的个人资料。

标签: python django django-urls


【解决方案1】:

您的视图必须能够接受额外的参数,最好是用户 ID,因为名称通常包含空格:

from django.shortcuts import get_object_or_404

@login_required
def profile(request, user_id):
    context_dict = {}
    u = get_object_or_404(User, pk=user_id)
    context_dict['user'] = u
    r = reg.Reg.objects.get(user=u)
    context_dict['reg'] = r
    return render(request, 'core/reg.html', context_dict)

那么你的urls.py就变成了:

urlpatterns = [
        ...
        url(r'^profile/(?P<user_id>[0-9]+)/$', profile.profile, name='profile'),
]

最后是你的 models.pyget_absolute_url 方法:

class Reg(models.Model):
    name = models.CharField(max_length=32, primary_key=True)
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, 
        related_name='%(app_label)s_%(class)s_reg', null=True)
    ...

    def get_absolute_url(self):
        return reverse('core:profile', user_id=self.id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多