Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用户按钮,用于选择随机发布并使用细节视图进行渲染_Python_Django_Url_Random_View - Fatal编程技术网

Python 用户按钮,用于选择随机发布并使用细节视图进行渲染

Python 用户按钮,用于选择随机发布并使用细节视图进行渲染,python,django,url,random,view,Python,Django,Url,Random,View,我已经开始使用Django 2.0和Python 3.6.3开发一个网站,它将显示定制的帖子,就像在博客帖子中一样 我希望用户能够点击一个按钮,基本上说是随机张贴。这个按钮将把他们带到一个模板,该模板将加载一篇随机的博客文章 以下是我的帖子模型: class Post(models.Model): post_id = models.AutoField(primary_key=True) ... other fields ... other fields def

我已经开始使用Django 2.0和Python 3.6.3开发一个网站,它将显示定制的帖子,就像在博客帖子中一样

我希望用户能够点击一个按钮,基本上说是随机张贴。这个按钮将把他们带到一个模板,该模板将加载一篇随机的博客文章

以下是我的帖子模型:

class Post(models.Model):
    post_id = models.AutoField(primary_key=True)
    ... other fields
    ... other fields

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title     
以下是一些相关的观点:

class PostListView(ListView):
    model = Post
    template_name = 'blog/post_list.html'

class PostDetailView(DetailView):
    model = Post
    template_name = 'blog/post_detail.html'
以下是我有问题的观点:

import random

def random_post(request):
    post_ids = Post.objects.all().values_list('post_id', flat=True) 
    random_obj = Post.objects.get(post_id=random.choice(post_ids))
    context = {'random_post': random_obj,}
    return render(request, 'blog/random_post.html', context)
在这里,我试图为post模型创建一个包含所有post_id值的值列表。然后我尝试从这个值列表中获得一个随机选择,它将是一个随机id。然后我尝试创建一个上下文并使用这个逻辑呈现一个模板

以下是相关的URL模式:

urlpatterns = [
        path('post/<int:pk>/', 
            views.PostDetailView.as_view(),name='post_detail'),
        path('post/random/<int:pk>', views.random_post, name='random_post'),
不用说,这是行不通的

如果我不使用,它将呈现一个没有数据的空白模板。如果包含,则会导致错误-未找到任何参数。我假设视图中没有查询数据,或者数据没有正确地从视图发送到模板


我是Django的新手。我感谢你的帮助

您可以使用唯一键/ID对数据库中的所有行进行排序,然后执行以下操作以选择随机数据库行:

maxnum = len(cursor.rowcount)
random.randint(1, maxnum)

这是对我有用的观点

def random_post(request):
    post_count = Post.objects.all().count()  
    random_val = random.randint(0, post_count-1)  
    post_id = Post.objects.values_list('post_id', flat=True)[random_val]   
    return redirect('post_detail', pk=post_id) #Redirect to post detail view

这对于“随机”部分很有用。URL和路由如何?我将如何实现这一点?