Django覚書に関して
色々覚えながら開発しているので、使い回す技とか仕様とかはここでメモしたい思う。
環境
開発機のOS: macOS Mojave 10.14.2
Python: python3(anaconda0
Django: 2.1.5
フォルダ構成
Application(ほかのチュートリアルではmysiteになってるやつ)
|-Conf(setting.pyやwsgi.pyがあるやつ、チュートリアルではmysiteになってるやつ別の名前にしないとややこしい)
| |- urls.py (ここで各アプリケーションのurls.pyをインクルードしてる)
| |- ・・・・
|
|-app01(アプリケーション本体,startappコマンドで作ったやつ)
| |- __init__.py
| |- views.py (ビュー)
| |- urls.py (App01自身のurl.py)
| |- apps.py
| |- forms.py (フォームモデル)
| |- models.py (モデル)
|
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('app01/', include('app01.urls'), #app01のurls.pyを読み込むのだ
]
from django.urls import path
from . import views
app_name = 'app01'
urlpatterns = [
path('index_view/<int:pk>/', views.index_view, name='index_view'),
]
/<int:pk>/はのちに渡す変数がここに入るよ、ということを示したいる。
ボタンやリンクでGETパラメーターを送ってview.pyで受け取る
どのページでも使うと言っていいこの技術。ここに書いて覚えていきたい。
前提
app01のGETパラメーターでapp01/views.pyに定義したhensuに値を渡したい。
テンプレート内から変数などをviews.pyに渡すときに一番簡単そうな方法として、urlに組み込んで渡す方法がある。
「app01/(渡したい数字などがここに入る)/」という風にurlが生成される。
[例]
pkという変数に1を入れると、「app01/1/」のようになる。
[記事修正]
GETパラメーターではなく「app01/ 渡したい数字など/」のようにする方法でした。Getパラメーターは別の方法です。
app01/urls.pyにも修正も修正しました。
class App01IndexView(View):
def get(self, request, pk):
hensu = pk
index_view = App01IndexView.as_view()
pkはapp01.pyでurlsで書いた<int:pk>の部分が反映されていると思われる。
実行
1.まずテンプレート内でのボタンとリンクはこんな感じになる。
もちろん、どちらか一つでいい。
GETパラメーターurlに渡す値をjorkerとする
<input type="button" onclick="location.href='{% url "app:appview" jorker %}'" value="ボタンだよ">
<a href="{% url "app01:appview" jorker %}">リンクだよ</a>
{% %}で囲ってurlの後に""内で
*app01/urls.pyで定義したapp_name
*app01/urls.pyで定義したpath関数内の名前付き引数name=に指定した名前
の二つを:でつなげる。
そしてその後に渡したい値を半角スペースの後に入力。すうじでもいいものと思われる。
すすと、jorkerはApp01IndexView(View)内のgetメソッドの第一引数に引き渡されるのでhensuに入力されることになる。