Python 用户按钮,用于选择随机发布并使用细节视图进行渲染
我已经开始使用Django 2.0和Python 3.6.3开发一个网站,它将显示定制的帖子,就像在博客帖子中一样 我希望用户能够点击一个按钮,基本上说是随机张贴。这个按钮将把他们带到一个模板,该模板将加载一篇随机的博客文章 以下是我的帖子模型: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
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和路由如何?我将如何实现这一点?