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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

HTML

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

Q&A

解決済

2回答

2917閲覧

エラー:「local variable '○○' referenced before assignment」の解決方法

harug

総合スコア28

Django

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

HTML

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

0グッド

0クリップ

投稿2021/11/28 19:39

前提・実現したいこと

Django上でWebアプリを作成しています。

「新規店舗の情報を記載して、登録ボタンで店舗登録を行う」機能を実装中に以下のエラーが発生しました。

以下は、エラーの原因とされる部分のみ記載しています。

該当のソースコード

まずはmodels.pyです。

python

1class ShopInfo(models.Model): 2 name = models.CharField(max_length=100, null=False, blank=False) 3 address = models.CharField(max_length=100, null=False, blank=False) 4 phonenumber = models.CharField(max_length=100, null=False, blank=False) 5 now_time = models.DateTimeField(verbose_name= '現在時刻', default=timezone.now) 6 open_time = models.DateTimeField(verbose_name= '開店時刻', default=timezone.now) 7 close_time = models.DateTimeField(verbose_name= '閉店時刻', default=timezone.now) 8 day_off_Mon = models.CharField(max_length=10, null=False, blank=False) 9 day_off_Tue = models.CharField(max_length=10, null=False, blank=False) 10 day_off_Wed = models.CharField(max_length=10, null=False, blank=False) 11 day_off_Thu = models.CharField(max_length=10, null=False, blank=False) 12 day_off_Fri = models.CharField(max_length=10, null=False, blank=False) 13 day_off_Sat = models.CharField(max_length=10, null=False, blank=False) 14 day_off_Sun = models.CharField(max_length=10, null=False, blank=False) 15 website = models.URLField() 16 17 def __str__(self): 18 ret = '<' + str(self.name) + '>' + self.address + self.phonenumber + self.open_time + '~' + self.close_time + self.day_off_Mon + self.day_off_Thu + self.day_off_Wed + self.day_off_Thu + self.day_off_Fri + self.day_off_Sat + self.day_off_Sun + self.website 19 return ret 20

次にviews.pyです。
実際にエラーに関わる部分は下のインスタンス生成のところです。

python

1def SubmitShopInfo(request): 2 # 名前を取得 3 if "name" in request.GET: 4 tmp_name = request.GET.get("name") 5 # 空欄の時は空白に設定 6 if len(tmp_name) > 0: 7 name = tmp_name 8 else: 9 name = "" 10 11 # 所在地を取得 12 if "address" in request.GET: 13 tmp_address = request.GET.get("address") 14 # 空欄の時は空白に設定 15 if len(tmp_address) > 0: 16 address = tmp_address 17 else: 18 address = "" 19 20 # 電話番号を取得 21 if "phonenumber" in request.GET: 22 tmp_phonenumber = request.GET.get("phonenumber") 23 # 空欄の時は空白に設定 24 if len(tmp_phonenumber) > 0: 25 phonenumber = tmp_phonenumber 26 else: 27 phonenumber = "" 28 29 # 開店時間を取得 30 if "open" in request.GET: 31 tmp_open = request.GET.get("open") 32 # 空欄の時は空白に設定 33 if len(tmp_open) > 0: 34 open = tmp_open 35 else: 36 open = "" 37 38 # 閉店時間を取得 39 if "close" in request.GET: 40 tmp_close = request.GET.get("close") 41 # 空欄の時は空白に設定 42 if len(tmp_close) > 0: 43 close = tmp_close 44 else: 45 close = "" 46 47 # 定休日を取得(月) 48 if "day_off_Mon" in request.GET: 49 tmp_day_off_Mon = request.GET.get("day_off_Mon") 50 # 空欄の時は空白に設定 51 if len(tmp_day_off_Mon) > 0: 52 day_off_Mon = tmp_day_off_Mon 53 else: 54 day_off_Mon = "" 55 56 # 定休日を取得(火) 57 if "day_off_Tue" in request.GET: 58 tmp_day_off_Tue = request.GET.get("day_off_Tue") 59 # 空欄の時は空白に設定 60 if len(tmp_day_off_Tue) > 0: 61 # global day_off_Tue 62 day_off_Tue = tmp_day_off_Tue 63 else: 64 day_off_Tue = "" 65 66 # 定休日を取得(水) 67 if "day_off_Wed" in request.GET: 68 tmp_day_off_Wed = request.GET.get("day_off_Wed") 69 # 空欄の時は空白に設定 70 if len(tmp_day_off_Wed) > 0: 71 day_off_Wed = tmp_day_off_Wed 72 else: 73 day_off_Wed = "" 74 75 # 定休日を取得(木) 76 if "day_off_Thu" in request.GET: 77 tmp_day_off_Thu = request.GET.get("day_off_Thu") 78 # 空欄の時は空白に設定 79 if len(tmp_day_off_Thu) > 0: 80 day_off_Thu = tmp_day_off_Thu 81 else: 82 day_off_Thu = "" 83 84 # 定休日を取得(金) 85 if "day_off_Fri" in request.GET: 86 tmp_day_off_Fri = request.GET.get("day_off_Fri") 87 # 空欄の時は空白に設定 88 if len(tmp_day_off_Fri) > 0: 89 day_off_Fri = tmp_day_off_Fri 90 else: 91 day_off_Fri = "" 92 93 # 定休日を取得(土) 94 if "day_off_Sat" in request.GET: 95 tmp_day_off_Sat = request.GET.get("day_off_Sat") 96 # 空欄の時は空白に設定 97 if len(tmp_day_off_Sat) > 0: 98 day_off_Sat = tmp_day_off_Sat 99 else: 100 day_off_Sat = "" 101 102 # 定休日を取得(日) 103 if "day_off_Sun" in request.GET: 104 tmp_day_off_Sun = request.GET.get("day_off_Sun") 105 # 空欄の時は空白に設定 106 if len(tmp_day_off_Sun) > 0: 107 day_off_Sun = tmp_day_off_Sun 108 else: 109 day_off_Sun = "" 110 111 # ウェブサイトのURLを取得 112 if "website" in request.GET: 113 tmp_website = request.GET.get("website") 114 # 空欄の時は空白に設定 115 if len(tmp_website) > 0: 116 website = tmp_website 117 else: 118 website = "" 119 120 # 新規の店舗情報としてインスタンスを作成 121 myinstance = models.ShopInfo.objects.create( 122 name = name, # 店名 123 address = address, # 所在地 124 phonenumber = phonenumber, #電話番号 125 open_time = open, #開店時間 126 close_time = close, #閉店時間 127 day_off_Mon = day_off_Mon, #定休日(月)###エラーはここで出ています。 128 day_off_Tue = day_off_Tue, #(火) 129 day_off_Wed = day_off_Wed, #(水) 130 day_off_Thu = day_off_Thu, #(木) 131 day_off_Fri = day_off_Fri, #(金) 132 day_off_Sat = day_off_Sat, #(土) 133 day_off_Sun = day_off_Sun, #(日) 134 website = website, #ウェブサイト 135 ) 136 137 # 店舗情報をを保存する 138 myinstance.save() 139 140 # オプション設定 141 options = [] 142 143 # 結果出力処理 144 return redirect('/index/') 145

一応index.htmlです。

python

1<div class="createshop" id="create_shop"> 2 <a href=''>お店の新規登録</a> 3 <div class="hidden"> 4 <form method="GET" action="{% url 'search_shop:submitshopinfo' %}" id="shopinfo_form"> 5 {% csrf_token %} 6 <label>店名:<input type="text" name="name"></label></br> 7 <label>所在地:<input type="text" name="address"></label></br> 8 <label>電話番号:<input type="text" name="phonenumber"></label></br> 9 <label>営業時間:<input type="time" name="open"><input type="time" name="close"></label></br> 10 定休日:<label><input type="checkbox" value="Mon" name='day_off_Mon'></label> 11               <label><input type="checkbox" value="Tue" name='day_off_Tue'></label> 12               <label><input type="checkbox" value="Wed" name='day_off_Wed'></label> 13               <label><input type="checkbox" value="Thu" name='day_off_Thu'></label> 14               <label><input type="checkbox" value="Fri" name='day_off_Fri'></label> 15               <label><input type="checkbox" value="Sat" name='day_off_Sat'></label> 16               <label><input type="checkbox" value="Sun" name='day_off_Sun'></label></br> 17 <label>ウェブサイト:<input type="text" name="website"></label></br> 18 19 <label><input type="submit" value="登録"></label> 20 </form> 21 </div> 22 </div>

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

これらにpython manage.py runserverを実行すると、次のようなエラーが発生しました。

local variable 'day_off_Mon' referenced before assignment

割り当て前にday_off_Monという値が参照されているという内容でした。
day_off_Monだけではなく、day_off_Tueからday_off_Sonまでにも同じ問題が発生していると思われます。
しかし、views.pyのSubmitShopInfoのどこで参照されているかが分かりません。
初歩的なことですが、どなたか解決方法をご教授お願い致します。

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

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

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

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

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

guest

回答2

0

関数の最初のところですべての変数に空文字列でも代入しとけばいいんでないかと。

投稿2021/11/29 00:00

y_waiwai

総合スコア88042

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

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

0

ベストアンサー

if "day_off_Mon" in request.GET:
の下りでヒットした場合にはday_off_Monが定義されます。

逆にヒットしなかった時day_off_Mon定義されません
定義されていないので、local variable 'day_off_Mon' referenced before assignmentが発生します。

ですので、対策は以下のように、requestなかった場合の対応を定義する、です。

Python3

1if "day_off_Mon" in request.GET: 2 # あった場合 3 # 略 4else: 5 # なかった場合 6 # なかった場合に望ましい対応、たとえば 7 day_off_Mon = "" 8

投稿2021/11/28 21:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

harug

2021/12/03 07:50

回答ありがとうございました! ”なかった場合”の一行を追加すると無事エラーなく実行できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問