2

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/ "を指すようにしましたが、テンプレートが見つからないと表示されますか?

私は今とても困惑しています..?

4

2 に答える 2