2017-12-14 4 views
0

私は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' 

は私の問題の図である。

は、ここに私のPostモデルだ私は、値を作成しようとしています。ここ

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_id値のリスト。それから私はこの値リストから無作為の選択肢を得ようとしています。次に、私はコンテキストを作成し、このロジックを使用してテンプレートをレンダリングしようとしています。

はここでは関係urlpatternsです:

urlpatterns = [ 
     path('post/<int:pk>/', 
      views.PostDetailView.as_view(),name='post_detail'), 
     path('post/random/<int:pk>', views.random_post, name='random_post'), 

言うまでもないが、これは機能していないと言うこと。

私がオフにしておくと、データのない空のテンプレートがレンダリングされます。を含めると、エラーが発生する - 引数が見つかりません。ビュー内でデータが照会されていないか、データがビューからテンプレートに正しく送信されていないと仮定します。

私はDjangoを初めて使用しています。私はあなたの助けに感謝します!

答えて

0

ここでは私のために働いたビューです。

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 
1

あなたは一意のキー/ IDはランダムなデータベースの行を選択するには、次のんで、データベース内のすべての行を注文することができます。

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

これは 'ランダム'部分に役立ちます。 URLとルーティングはどうですか?私はこれをどのように実装しますか? –

関連する問題