【问题标题】:Django dynamic Url problem- invalid literal for int() with base 10:Django 动态 URL 问题 - 以 10 为基数的 int() 的无效文字:
【发布时间】:2020-07-30 22:57:49
【问题描述】:

我正在尝试创建一个动态 url,当他试图转到他的个人帖子页面时,将当前用户的名称添加到路径中。 在个人帖子页面中,我过滤了所有帖子并仅显示当前用户的帖子列表。我只想将他的名字也添加到网址中。而已。 我尝试了很多东西,但都失败了。我有一种感觉,问题在于作者引用了Django内置的User模型。

我的代码:

网址:

    path('<username>/', views.personalposts, name='personalposts'),

观点:

之前的观点是:

def personalposts(request, username):
    items = Post.objects.filter(author=request.user)

    return render(request, 'TheApp/personalposts.html', {'items':items})

我仍然想显示这样的个人帖子。它可以工作,但没有动态网址。

现在我把它改成了:

def personalposts(request, username):
    items = Post.objects.get(author=username)

    return render(request, 'TheApp/personalposts.html', {'items':items})

型号:

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.PROTECT)
    #כדי שרק משתמשים רשומים יוכלו ליצור פוסט
    title = models.CharField(max_length=200)
    text = models.TextField()
    create_date = models.DateTimeField(default=timezone.now)
    post_views = models.IntegerField(default=0)

【问题讨论】:

    标签: django url dynamic-url


    【解决方案1】:

    items = Post.objects.get(author=username)
    

    您检查作者字段是否与用户名相同,您可以这样查找FK字段:

    items = Post.objects.filter(author__username=username)
    

    但请注意,如果您有多个作者使用相同的用户名,则会中断。

    这类似于:Django - filtering on foreign key properties

    编辑:更正过滤器

    编辑:检查只有用户自己可以看到帖子:

    def personalposts(request, username):
        if username == request.user.username:
            items = Post.objects.filter(author__username=username)
            return render(request, 'TheApp/personalposts.html', {'items':items})
        else:
            # handle it
            raise PermissionDenied() # as a example
    

    【讨论】:

    • 谢谢,我试着用 author.username 来做,但没有用。这是因为在查询的情况下您应该使用查找对吗?
    • 关于倍数,现在它说:“get() 返回了多个帖子——它返回了 2”。为什么它有问题?我认为这就是为什么我需要过滤而不是使用 Get。无论如何,我想了解的是这一切是如何运作的。我想使用动态 url,所以我把它写在路径中,例如:。第二步是在我的视图函数中将其作为参数获取对吗?然后我该如何设置呢?我不明白这部分
    • 是的,您应该使用过滤器,对此感到抱歉...然后它的作者__用户名__很重要,您设置它是什么意思?在您的 html 中,您根据此处的文档使用 {% url my_view username=request.user.username %} 之类的 URL 链接:docs.djangoproject.com/en/3.0/ref/templates/builtins/#url
    • 是的,它做到了并且工作了.. 但是如果我手动输入 url 路径并写任何东西而不是 user.username 它仍然有效.. 我只希望 user.user name 为 它会起作用的
    • 因为我希望路径中的每个 都会导致该用户名的帖子。现在我可以写任何我想写的东西,它会显示当前用户的帖子。我希望他只在路径中使用他的用户名访问这个帖子页面。知道了吗?
    【解决方案2】:

    K 发现了一个问题!在我的 base.html 中,我使用了 Realtive Url,它是预期的和参数。 但是现在我可以在 url 中写任何东西并且它仍然可以工作..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-04
      • 2023-03-09
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多