mysite_categories という名前の MySQL データベースにテーブルがあり、4 つの列がありますが、私の目的では 2 つだけ必要です (名前、base_url)。
現在、カテゴリを手動でロードするために使用するテンプレート「*base_categories.html*」があります。
base_categories.html (縮小)
{% block content %}
<div class="section" style="float: right;">
<h4 class="gradient">Category List</h4>
<ul>
<li><a href="/categories/Art" id="nav_font">Art</a></li>
<li><a href="/categories/Biography" id="nav_font">Biography</a></li>
<li><a href="/categories/Science" id="nav_font">Science</a></li>
</ul>
</div>
{% endblock %}
私がやりたいのは、データベースからデータを取得して for ループで使用することです。何かのようなもの:
{% block content %}
<div class="section" style="float: right;">
<h4 class="gradient">Category List</h4>
<ul>
{% for category in mysite_categories %}
<li><a href="{{ category.base_url }}" id="nav_font">{{ category.name }}</a></li>
{% endfor %}
</ul>
</div>
{% endblock %}
これはおそらく初心者の質問ですが、アプリを作成せずにこのようなことは可能ですか?
*EDIT 1*
これらは私のアプリファイルです。これはおそらくジャンクであることを認めます。非常に多くの異なる投稿から非常に多くの編集を試みましたが、どこかでそれを壊したと確信しています:P. 私はそれを削除して新たに始めるつもりでしたが、どこが間違っていたのかを確認するために投稿したほうがよいと思いますか?
ビュー.py
from django.shortcuts import render_to_response
from categories.models import categoryList
def index(request):
categories = categoryList.objects.all()
extra_context = {"categories": categories}
return render_to_response("myapp/index.html", extra_context)
models.py
from django.db import models
class categoryList(models.Model):
#id = models.IntegerField(unique=True, db_column='ID') # Field name made lowercase.
name = models.CharField(max_length=255L, unique=True)
base_url = models.CharField(max_length=255L, unique=True)
thumb = models.CharField(max_length=1L, unique=True, blank=True)
class Meta:
db_table = 'mysite_categories'
index.html
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<div class="section" style="float: right;">
<h4 class="gradient">Category List</h4>
<ul>
{% for category in categories %}
<li><a href="" id="nav_font">{{ category.title }}</a></li>
{% endfor %}
</ul>
</div>
前述のとおり、この時点ではおそらくがらくたです。どなたかがこれを正すのを手伝っていただければ幸いです。
*EDIT 2*
base_right_panel.html
{% block content %}
<div style="float: right;">
<div id="base_categories" style="margin: 10px; padding-bottom: 10px;">
{% block base_categories %}
{% include "base_categories.html" %}
{% endblock %}
</div>
</div>
{% endblock %}
*Edit 3*
base_categories.html
{% block content %}
<div class="section" style="float: right;">
<h4 class="gradient">Category List</h4>
<ul>
{% if categories %}
{% for category in categories %}
<li><a href="" id="nav_font">{{ category.title }}</a></li>
{% endfor %}
{% else %}
<p>no data! {{ categories|length }}</p>
{% endif %}
</ul>
</div>
{% endblock %}
*EDIT 4*
(アプリ名をCategoryListに変更)
カテゴリリスト/views.py
from django.views.generic import TemplateView
from CategoryList.models import CategorylistCategorylist #<-- Changed to match inspectdb result
class IndexView(TemplateView):
template_name="categorylist.html" #<-- Changed name from index.html for clarity
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context["categories"] = CategorylistCategorylist.objects.all()
return context
カテゴリリスト/models.py
from django.db import models
class CategorylistCategorylist(models.Model): #<-- Changed to match inspectdb
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255L, unique=True)
base_url = models.CharField(max_length=255L, unique=True)
thumb = models.ImageField(upload_to="dummy", blank=True) #<-- Ignored inspectdb's suggestion for CharField
def __unicode__(self):
return self.name
# Re-added Meta to match inspectdb
class Meta:
db_table = 'categorylist_categorylist'
カテゴリリスト/urls.py
from django.conf.urls.defaults import patterns, url, include
from django.contrib import admin
from django.conf import settings
from CategoryList import views
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name='categorylist'),
)
if settings.DEBUG:
urlpatterns = patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
url(r'', include('django.contrib.staticfiles.urls')),
) + urlpatterns
MySite/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from home import views as home_view
from CategoryList import views as index_view
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', home_view.HomeView.as_view(), name="home"),
url(r'^categories/$', index_view.IndexView.as_view(), name='categorylist'),#include('CategoryList.urls')),
url(r'^admin/', include(admin.site.urls)),
#url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
)
if settings.DEBUG:
urlpatterns = patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
url(r'', include('django.contrib.staticfiles.urls')),
) + urlpatterns
これまでのところ、「 localhost:8000/categories 」という URL を読み込むことができ、予想どおり画面の右側にカテゴリ名のリストが表示されますが、テンプレートの書式設定は適用されていません。"*base_right_panel.html*" ファイル内で " {% include "categorylist.html %} " を試してアプリケーションに直接リンクすると、正しいテンプレート形式が表示されますが、" {% else %} " 応答が表示されます。カテゴリの代わりに" {% if categories %} " から? インクルードを変更して、ブラウザで動作する " categories/ "を指すようにしましたが、テンプレートが見つからないと表示されますか?
私は今とても困惑しています..?