Django学習ノート(4)他のWebページの作成

27048 ワード

各ページには、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というブロック名のペアのブロックラベルを挿入します.プレースホルダです.

<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.