☆☆ 新着記事 ☆☆

2018年5月28日月曜日

Django (12) 新画面の追加 view.pyの変更



新しく作成したアプリ(music)のページで、作成したデータベースが反映されるように更新していきます。

現時点のurls.pyとview.py



*view.py は、 urls.pyにより導かれたrequestにどのようなレスポンスを返すか記述しているプログラムファイル。


構成としては、music のページに
・Albumの一覧ページ を作成
・一覧のうちの特定のアルバムをクリックするとアルバムの詳細が表示される。

とする。

では、詳細ページから作成。


1. プロジェクト内 " urls.py " の変更




コマンドライン

解説
import re
from django.urls import path
from . import views 


urlpatterns = [
    # /music/
    path(r'', views.index, name='index'),
  


    # /music/712/
     path(r'^(?P<album_id>[0-9]+)/$', views.detail, name='detail'),

    path('<int:album_id>', views.detail, name='detail'), 
]

 
 

<- music/ 以降のディレクトリの指定がないrequestに対する処理

<- music/ 以降のディレクトリに、album IDの指定があるrequestに対する処理
<-任意の桁数の数字を引いてくる。


<- 上手くいかない。(Error message下記)


<-修正版  


html Error Message with deleted descriptioned shown above


*Raw Stringの解釈がうまくできていないのか?




(参考)
https://stackoverflow.com/questions/31056789/difference-between-and-in-urls-django
Q. What is the difference between the below two url patterns in django?
url(r'^$', views.indexView, name='index'),
url(r'', include('registration.urls'))

Answer)
Lets say my regex was ^a, then the regex will look for a in the start of the string:
'a'    # Matches 'a' in 'a'  
'abc'  # Matches 'a' in 'abc'
'def'  # Not match because 'a' was not at the beginning 
$ (Dollar sign):
$ matches the end of the string.
If my regex was b$, then it will match b at the end of the string:
'b'     # Matches 'b' in 'b'
'ab'    # Matches 'b' in 'ab'
'abc'   # Does not match 
Using r'^$':
Using both ^ and $ together as ^$ will match an empty line/string.
url(r'^$', views.indexView, name='index')
When Django encounters an empty string, it will go to the index page.
Using r'':
When you use r'', Django will look for an empty string anywhere in the URL, which is true for every URL.
So, if your urlpattern was like this:
url(r'', views.indexView, name='index')
All your urls will go to index page.


 




2. プロジェクト内 " view.py " の変更

view.pyを変更します。


 " view.py " の内容を以下の記述に変更します。


from django.http import HttpResponse
def index(request):  #urlsで指定したnameでfunction定義
    return HttpResponse("<h1> This is the Music App Homepage!</h1>")

def detail(request, album_id):
    return HttpResponse("<h2> Details for Album id: " + str(album_id) + "</h2>")




すると、以下の詳細ページがリンクつけされます。










参考)
Django Tutorial for Beginners - 12 - Writing Another View
https://youtu.be/mWofrhTwGWQ

0 件のコメント:

コメントを投稿