前提・実現したいこと
Djangoを勉強中の初心者です。
以前にも同じ問題で質問させて頂いたのですが、ソースコード等でより具体的にしなかったため内容がわかりにくかったのではと思い、その点を修正して再度投稿させて頂きます。
単語カード的なアプリを試作中です。
ローカルの仮想環境では何とか動いてはいるのですが、Pythonanywhereでデプロイすると、「400 Bad Request openresty/1.15.8.3」が出て、動かなくなります。
状況は、問題の条件を設定するページ(set.html)上で、forms.MultipleChoiceFieldを使って条件を設定した後、ボタンでSubmitした時です。ローカルの仮想環境では動いているものの、ChromeのConsole上で、以下のエラーメッセージが出ているのがその原因ではないかと考えています。
後学のためにもご教示頂きたいポイントは以下の点です。
- 当該URIのどの部分が不正なのか
- それを発生させているのはコードのどの部分なのか(views.py/urls.py ?)
- もしくはBootstrap等によるものなのか
- その部分をどう修正すべきか
そもそも原因の見当が的外れなのかもしれませんが、その場合は、その旨ご指摘いただけるだけでも大変助かりますので、どうかよろしくお願い致します。
発生している問題・エラーメッセージ
The attempt to bind "/myapp/set/%%20url%20'set'%20%" in the workspace failed as this URI is malformed.
該当のソースコード
以下、一部省略/単純化しています。
forms.py
Python
1class SelectForm(forms.Form): 2 3 AAA = forms.MultipleChoiceField ( 4 label = 'AAA', 5 choices = [ 6 ("a","aaa"), 7 ("b","bbb"), 8 widget = forms.CheckboxSelectMultiple(), 9 required=False, 10 ) 11 XXX = forms.MultipleChoiceField ( 12 label = 'XXX', 13 choices = [ 14 ("x","xxx"), 15 ("y","yyy"), 16 widget = forms.CheckboxSelectMultiple(), 17 required=False, 18 )
views.py
Python
1class SetView(TemplateView): 2 3 def __init__(self): 4 self.params = { 5 'title': 'set', 6 'form': SelectForm(), 7 } 8 9 def get(self, request): 10 return render (request, 'set.html', self.params) 11 12 def post (self, request): 13 14 #チェックボタンから候補選択のリストを作る 15 AAA_chcd = request.POST.getlist('AAA') 16 XXX_chcd = request.POST.getlist('XXX') 17 18 #上記リストを結合 19 cnddt = AAA_chcd + XXX_chcd 20 21 return render (request, 'set.html', self.params)
myapp/urls.py
Python
1 2app_name = 'myapp' 3 4urlpatterns = [ 5 url(r'^set/', SetView.as_view(), name = 'set') 6]
set.html
html
1{% load static %} 2<!doctype html> 3 4<head> 5 <meta charset="utf-8"> 6 7 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> 8 9 <link rel="stylesheet" type="text/css" href={% static 'myapp/css/bootstrap.min.css' %} /> 10 <link rel="stylesheet" type="text/css" href={% static 'myapp/css/custom.css' %} /> 11 <title>{{title}}</title> 12</head> 13 14<body> 15 {% load crispy_forms_tags %} 16 17 <!--Nav-Bar(省略) --> 18 19 <form action="% url 'set' %" method="post"> 20 {% csrf_token %} 21 22 <div class="container-fluid"> 23 <div class="row"> 24 <div class="col">{{ form.AAA|as_crispy_field }} </div> 25 <div class="col">{{ form.XXX|as_crispy_field }} </div> 26 </div> 27 </div> 28 29 <div class="container-fluid"> 30 <div class="d-flex justify-content-center"> 31 32 <div class="col"> 33 <button type="submit" class="btn btn btn-dark btn-block"> 34 Set 35 </button> 36 </div> 37 38 </div> 39 </div> 40 41 </form> 42 43 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> 44 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> 45 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> 46 47</body> 48 49</html>
補足情報(FW/ツールのバージョンなど)
[環境]
Mac Os Catalina
Django 3.1.1
Python 3.8
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。