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

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

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

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

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

5755閲覧

【Django】ユーザーごとのページを作成したい。

Lim-Nic

総合スコア18

Django

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

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/07/20 08:45

編集2020/07/20 10:30

前提・実現したいこと

基本的な概念や記述方法など理解していない部分が多いです。
今は参考書内容をそのままコピー、そこから一部変更を加えてみる。というやり方でやっています。

今回は以下のサイトのスケジューラを参考にさせて頂いています。
https://blog.narito.ninja/detail/11/

そこで、基本となるページ(サイトの内容+別ページなど)は作成できたのですが、複数人で使用することを想定して
/mycalendar/user1/、/mycalendar/user2/と個別のページを作りたいです。
ログインなどのページは考えず、そのアドレスに直接アクセスすれば使用できることを目指しています。(Aさんはuser1のアドレスを使用してくださいとあらかじめ決める)

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

■現状
1.url.py で想定されるURL構成を記述
2.mixins.py でurlの<user>パラメータを取得してcontextとして送信
3.Htmlのアクセス先urlにcontextの<user>を追記することでサイトの移動ができる
(ページを読み込んだ時点で、そのサイトに書かれた移動先のurlを/calendar/user1 になるように予め指定してしまう)
のような動きを想定していましたが
~~mixins.py の<user>をprintで表示すると、user1 として表示されるのに対して
アクセス先のurlには、mycalendar/user1/%7B%25%20url%20'mycalendar'%20%25%20user%3Duser1%20%7D
と不要な部分が表示されてしまい、結果ページが見つかりません。とエラーになります。
~~
~~
基本のページ(/mycalendar/)にはアクセス可能ですが、ページを移動するたびに
url(%7B%25%20url%20'mycalendar'%20%25%20user%3Duser1%20%7Dのような部分)がどんどん長くなり、アクセスできなくなります。
※これは不要な部分を<user>だと勘違いして取得してしまっているのかなと思っていますが、結局解決方法が分かりません。
~~
(おかしな状態で保存されていたようで、バックアップの内容と入れ替えると正常になりました。)

最初にアクセスした際、<user>が存在しません。とエラーになります。
回避策などあれば教えて頂きたいです。

該当のソースコード

url.py

app_name = 'app' urlpatterns = [ path('mycalendar/', views.MyCalendar.as_view(), name='mycalendar'), path('mycalendar/<str:user>/', views.MyCalendar.as_view(), name='mycalendar'), path('mycalendar/<int:year>/<int:month>/<int:day>/', views.MyCalendar.as_view(), name='mycalendar'), path('mycalendar/<str:user>/<int:year>/<int:month>/<int:day>/', views.MyCalendar.as_view(), name='mycalendar'), ]

mixins.py

def get_month_calendar(self): user_adr = self.kwargs.get('user') print(user_adr) month_adr = self.kwargs.get('month') year_adr = self.kwargs.get('year') day_adr = self.kwargs.get('day') #print(year_adr,month_adr,day_adr) if month_adr and year_adr and day_adr: now_weekday = datetime.date(year_adr, month_adr, day_adr).weekday() today = datetime.date(year_adr,month_adr,day_adr) else: now_weekday = datetime.date.today().weekday() year_adr = datetime.date.today().year month_adr = datetime.date.today().month day_adr = datetime.date.today().day today = datetime.date.today() #print("MonthCalendarMixin Start") """月間カレンダー情報の入った辞書を返す""" self.setup_calendar() current_month = self.get_current_month() calendar_data = { 'now': today, 'month_days': self.get_month_days(current_month), 'month_current': current_month, 'month_previous': self.get_previous_month(current_month), 'month_next': self.get_next_month(current_month), 'week_names': self.get_week_names(), 'user':user_adr, } #print("MonthCalendarMixin End") return calendar_data

html

<a class="nav-content" href="{% url 'mycalendar' user = {{user}} % }">Month</a>

試したこと

htmlの追加パラメータの書き方には、
href="{% url 'mycalendar' user = {{user}} % }
href="{% url 'mycalendar' {{user}} % }
などあるようですが、どちらも想定した動作が出来ませんでした。

また、mixins.py(Viwes.py)に

def detail(request, question_id): context = {'question_id': question_id} return render(request, 'polls/detail.html', context)

のように関数を書くと紹介されていましたが、classごとに分けて作成しているとき
どこをどのように変更・追加すればよいのか分かりませんでした。

かれこれ2週間ほど悩んでいます。

ユーザーごとに1枚ずつページを作ろうとも思いましたが
Views.pyやmixins.pyもユーザーごとに量産することを考えると効率的ではないと思い
かといって、どのように変更すればよいかもイマイチ理解できていません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

urlのところ

HTML

1href="{% url 'mycalendar' {{user}} %}" 2```じゃなくて 3```HTML 4href="{% url 'mycalendar' user %}" 5```です。 6`{% %}`内のtemplate変数は`{{}}`がいりません

投稿2020/07/22 07:54

編集2020/07/24 05:12
ForestSeo

総合スコア2722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lim-Nic

2020/07/30 02:15

その通りでした。 以下個人的な見解ですが user という変数はあまり使わない方が良いかと思っています。 自身で指定したuserとDjango自体が固有で持ってる user と混合してしまい、動作がおかしくなっていたように思えます。 それに、直接urlにuserを指定して書き込んでアクセスしようとしていたので、初回アクセス時にuserが見つからずエラーになっていたようです。 結果的に、Djangoの機能としてログインしたユーザーを self.request.user で取出し、そのユーザーによってWeb表示の方法を分岐させるように設定しました。 回答者さんの方法でも動作出来る事は確認済みです。
Lim-Nic

2020/07/30 02:15

回答ありがとうございました。
ForestSeo

2020/07/30 02:26 編集

ちなみにですが、僕はログインユーザーをviews.pyで渡すことはせずtemplate上で {{request.user}} とするだけでログインユーザーを取得しています。
Lim-Nic

2020/07/30 04:21

確認したところ、その方法でも可能でした。 今はまだ出来る事だけを組み合わせている状態ですが、 後にはそのような使い方で無駄なく作れるようになりたいです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問