質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

DjangoのURLに2つのPKを設定したい

fntmn
fntmn

総合スコア27

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0リアクション

0クリップ

170閲覧

投稿2022/08/14 03:07

実現したいこと

会員制サイトの制作中で、URLにユーザーのpkとNEWSのpkを設定したいです。
仕上がりイメージとしては
https://www.----/<ユーザーのpk>/news/<NEWSのpk>/
といった感じです。
他の方の質問で既に解決されているようですが、私の知識が及ばず、自作している中に反映できませんでした。
https://teratail.com/questions/173756

発生している問題・エラーメッセージ

そのまま、urls.pyに<pk>を設定すると、当然ながら以下のエラーとなります。
解決済みの回答を見ると、pkの変数名を変更しているようですが、色々な資料を独学で(理解しきれないまま)引用していたため、応用が出来ません。

re.error: redefinition of group name 'pk' as group 2; was group 1 at position 29

該当のソースコード

USERとNEWSは別々のDBで管理しています。
そのため、views.pyでUSERのDBを読み込んでいます。

urls.py

urlpatterns = [ path('view/<pk>/', views.NewsLists.as_view(), name="news_list"), path('view/<pk>/news/<pk>/', views.NewsDetail.as_view(), name="news_detail"), ]

views.py

class NewsLists(generic.ListView): model = User template_name = "news/index.html" def get_context_data(self, **kwargs): context = super(NewsLists, self).get_context_data(**kwargs) context['news_list'] = News.objects.filter(user_id=self.kwargs['pk']).order_by('-created_at') return context def get_queryset(self): user = User.objects.filter(user_id=self.kwargs['pk']).order_by('-created_at') return user class NewsDetail(generic.DetailView): model = User template_name = "news/detail.html" def get_context_data(self, **kwargs): context = super(NewsDetail, self).get_context_data(**kwargs) context['news_list'] = User.objects.filter(user_id=self.kwargs['pk']).order_by('-created_at') return context def get_queryset(self): user = User.objects.filter(user_id=self.kwargs['pk']).order_by('-created_at') return user

index.html

{% for user in user_list %} <dl> <dt>{{ news.created_at }}</dt> <dd><a href="{% url 'user:news_detail' news.pk %}">{{ news.title }}</a></dd> </dl> {% empty %} <p>お知らせはありません。</p> {% endfor %}

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。