Django学習ノート(4)他のWebページの作成
各ページには、URLモードを指定する3ステップが必要です.ビュー関数を記述します.テンプレートを作成します.
4.1テンプレートは1つのプロジェクトに継承され、通常はウェブサイト全体に使用される親テンプレートbaseがある.html、そしてウェブサイトの各主要部分には親テンプレートがあり、各部分の親テンプレートはbaseを継承する.html、Webサイトの各Webページは、対応する部分の親テンプレートを継承します.この構成は、Webサイトの変更が容易で、より効率的です.4.1.1親テンプレートbaseという名前の親テンプレートを作成する.htmlは、indexに格納.htmlが存在するディレクトリ.プロジェクト名を含む段落を作成します.ホームページindexへのリンクです.リンクを作成するには、テンプレートラベル{%%%}、テンプレートラベル{%url'learning_logs:index'%}を使用して、learning_logs/urls.pyでindexと名付けられたURLパターンマッチング.contentというブロック名のペアのブロックラベルを挿入します.プレースホルダです.
4.2.2サブテンプレートのサブテンプレート継承親テンプレート{%extends"learning_logs/base.html"%}サブテンプレートのブロックラベルの内容を{%block content%}と{%endblock content%}の間に書く.
4.2すべてのトピックのページURLパターンを表示する:
表示:
テンプレート:
テンプレートでは、ループ終了を{%endfor%}で表します.テンプレート内のループ:
親テンプレートを子テンプレートへのリンクに含めるように変更します.
ホームページのリンクにハイフン(-)を付け、別のサブテンプレートのページリンクを追加します.
4.3特定のトピックを表示するページも同様に、URLモードを定義し、ビューを作成し、テンプレートを作成する必要があります.URLモード:
正規表現r'^topics/(?Pd+)/$'を詳しく検討し、一致するURLの値をtopic_に格納するid変数にあります.
表示:
前のビュー関数とは異なりviews.topic()はrequestを受信するほか、特定のtopic_も受信するid、クエリーに使用します.topic = Topic.objects.get(id=topic_id) entries = topic.entry_set.order_by(’-date_added’) date_added前のマイナス記号は降順で並ぶことを指定しています.
テンプレート継承親テンプレート:{%extends'learning_logs/base.html'%}プロジェクトリストで、各エントリのタイムスタンプとテキスト情報をループで取得します.Djangoテンプレートの縦線(|)はテンプレートフィルタを表します.フィルタdate:'M d,Y H:i'は、タイムスタンプを表示するフォーマットを示します.ここでdate:'Mの間にスペースがないことに注意してください.そうしないと、マッチングに失敗します.フィルタlinebreaksは、改行文字を含むエントリをブラウザが理解できるフォーマットに変換します.
テンプレートを変更するhtmlは、各トピックを対応するWebページにリンクできるようにします.
URLモードでは、実パラメータtopicを提供する必要があります.idであるため、テンプレートラベルurlに属性topicを追加する.id.
4.1テンプレートは1つのプロジェクトに継承され、通常はウェブサイト全体に使用される親テンプレートbaseがある.html、そしてウェブサイトの各主要部分には親テンプレートがあり、各部分の親テンプレートはbaseを継承する.html、Webサイトの各Webページは、対応する部分の親テンプレートを継承します.この構成は、Webサイトの変更が容易で、より効率的です.4.1.1親テンプレートbaseという名前の親テンプレートを作成する.htmlは、indexに格納.htmlが存在するディレクトリ.プロジェクト名を含む段落を作成します.ホームページindexへのリンクです.リンクを作成するには、テンプレートラベル{%%%}、テンプレートラベル{%url'learning_logs:index'%}を使用して、learning_logs/urls.pyでindexと名付けられたURLパターンマッチング.contentというブロック名のペアのブロックラベルを挿入します.プレースホルダです.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>basehtmltitle>
head>
<body>
<p>
<a href="{% url 'learning_logs:index' %}">Learning Loga>
p>
{% block content %}
{% endblock content %}
body>
html>
4.2.2サブテンプレートのサブテンプレート継承親テンプレート{%extends"learning_logs/base.html"%}サブテンプレートのブロックラベルの内容を{%block content%}と{%endblock content%}の間に書く.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>indextitle>
head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
<p>Learning Logp>
<p>Learning Log helps you keep track of your learning, for any topic you're learning about.p>
{% endblock content %}
body>
html>
4.2すべてのトピックのページURLパターンを表示する:
""" learning_logs URL """
from django.conf.urls import url
from . import views
urlpatterns = [
#
url(r'^$', views.index, name='index'),
#
url(r'^topics$', views.topics, name='topics'),
]
app_name = 'learning_logs'
表示:
def topics(request):
""" """
topics = Topic.objects.order_by('date_added')
context = {'topics': topics}
return render(request, 'learning_logs/topics.html', context)
テンプレート:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Topicstitle>
head>
<body>
{% extends "learning_logs/base.html"%}
{% block content %}
<p>Topicsp>
<ul>
{% for topic in topics %}
<li>{{ topic }}li>
{% empty %}
<li>
。
li>
{% endfor %}
ul>
{% endblock content %}
body>
html>
テンプレートでは、ループ終了を{%endfor%}で表します.テンプレート内のループ:
{% for item in list %}
do something with each item
{% endfor %}
親テンプレートを子テンプレートへのリンクに含めるように変更します.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>basehtmltitle>
head>
<body>
<p>
<a href="{% url 'learning_logs:index' %}">Learning Loga>-
<a href="{% url 'learning_logs:topics' %}">Topicsa>
p>
{% block content %}{% endblock content %}
body>
html>
ホームページのリンクにハイフン(-)を付け、別のサブテンプレートのページリンクを追加します.
4.3特定のトピックを表示するページも同様に、URLモードを定義し、ビューを作成し、テンプレートを作成する必要があります.URLモード:
""" learning_logs URL """
from django.conf.urls import url
from . import views
urlpatterns = [
#
url(r'^$', views.index, name='index'),
#
url(r'^topics$', views.topics, name='topics'),
#
url(r'^topics/(?P\d+)/$' , views.topic, name='topic'),
]
app_name = 'learning_logs'
正規表現r'^topics/(?Pd+)/$'を詳しく検討し、一致するURLの値をtopic_に格納するid変数にあります.
表示:
def topic(request, topic_id):
""" """
topic = Topic.objects.get(id=topic_id)
entries = topic.entry_set.order_by('-date_added')
context = {'topic': topic, 'entries': entries}
return render(request, 'learning_logs/topic.html', context)
前のビュー関数とは異なりviews.topic()はrequestを受信するほか、特定のtopic_も受信するid、クエリーに使用します.topic = Topic.objects.get(id=topic_id) entries = topic.entry_set.order_by(’-date_added’) date_added前のマイナス記号は降順で並ぶことを指定しています.
テンプレート継承親テンプレート:{%extends'learning_logs/base.html'%}プロジェクトリストで、各エントリのタイムスタンプとテキスト情報をループで取得します.Djangoテンプレートの縦線(|)はテンプレートフィルタを表します.フィルタdate:'M d,Y H:i'は、タイムスタンプを表示するフォーマットを示します.ここでdate:'Mの間にスペースがないことに注意してください.そうしないと、マッチングに失敗します.フィルタlinebreaksは、改行文字を含むエントリをブラウザが理解できるフォーマットに変換します.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Topictitle>
head>
<body>
{% extends 'learning_logs/base.html' %}
{% block content %}
<p>Topicp>
<p>Entries:p>
<ul>
{% for entry in entries %}
<li>
<p>{{ entry.date_added|date:'M d, Y H:i' }}p>
<p>{{ entry.text|linebreaks }}p>
li>
{% empty %}
<li>
There are no entries for this topic yet.
li>
{% endfor %}
ul>
{% endblock content %}
body>
html>
テンプレートを変更するhtmlは、各トピックを対応するWebページにリンクできるようにします.
<body>
{% extends "learning_logs/base.html"%}
{% block content %}
<p>Topicsp>
<ul>
{% for topic in topics %}
<li>
<a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}a>
li>
{% empty %}
<li>
。
li>
{% endfor %}
ul>
{% endblock content %}
body>
URLモードでは、実パラメータtopicを提供する必要があります.idであるため、テンプレートラベルurlに属性topicを追加する.id.