base.htmlを拡張するテンプレートがいくつかあります。base.htmlテンプレートにグローバル ナビゲーションを格納し、グローバル ナビゲーションのテキストとリンクをモデル Division に基づくようにしたい (つまり、CharField
モデルの はグローバル ナビゲーションのボタン テキストとして使用され、id はURL の作成に使用されます)。タグが機能する可能性があると思っていましたが、最終的には次のようになりました (はい、Django と Python は初めてです)。
current_tags.py
from django import template
# Import your model
from libs.display.models import Division
from django.db import models
register = template.Library()
@register.simple_tag
def do_get_divisions(self):
d = Division.objects.all()
mylist = []
for each in d:
mylist.append(str(each.DivisionValue))
return my list
以下に示すように、テンプレート内のオブジェクトを取得または操作できないため、この時点で各オブジェクトのテキスト値を取得して印刷しようとしています。
base.html
<!DOCTYPE html>
<html>
<head>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}style.css" />
</head>
<body>
{% load current_tags %}
<p>{% do_get_divisions "" %}</p> **THIS ACTUALLY PRINTS mylist**
{% for each in do_get_divisions %} **THIS DOESN'T PRINT ANYTHING**
<p>{{ each }}</p>
{% endfor %}
{% block content %}
{% endblock %}
</body>
</html>
Django のモデルに基づいてグローバル ナビゲーションを行うためのより良い方法があると確信しています。私は基本的に、すべての Division オブジェクトを取得し、 base.html<ul>
でグローバル ナビゲーションとして使用するためにそれらを に入れたいと考えています。私は Django にはあまり詳しくありませんが、base.htmlを拡張しているbase.htmlではなく、他のテンプレートをレンダリングしているため、 views.pyは役に立ちません。価値があるのは、/display/info.htmlテンプレートが base.html を拡張する1 つのviews.pyです。
# Create your views here.
from django.http import HttpResponse
from apps.pulldata.models import Data
from django.shortcuts import render, get_object_or_404
from django.http import Http404
def info(request, group_id):
group = get_object_or_404(Data, pk=group_id)
s = group.XInGroup.all()
return render(request, 'display/info.html', {'Group': group, 's': s})