3

到目前为止,我已经能够创建一个项目并设置一个主页。到目前为止,我已经成功地设置了页面样式并设置了导航区域。我还创建了一个应用程序,它从我的数据库中提取类别名称列表并将其显示在右对齐列表中。当我将浏览器指向应用程序 url 时,它可以正常工作,但是当我尝试在我的项目中包含视图时,它会显示带有错误的基本面板,并且我传递给视图的字典似乎不可用。

这是我在浏览器中加载主页 url localhost:8000/ 时得到的:

网址:本地主机:8000/

这是我在浏览器中加载应用程序 url localhost:8000/categories/ 时得到的:

网址:本地主机:8000/类别/

为什么我无法将我的应用程序的结果推送到我的模板中?两者似乎都可以工作但不能一起工作?

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 %}

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 %}

类别列表/views.py

from django.views.generic import TemplateView
from CategoryList.models import CategorylistCategorylist #<-- Changed to match inspectdb result

class IndexView(TemplateView):
    template_name="base_categories.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='base_categories'),
)

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

我的网站/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='base_categories'),#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

我有另一个未解决的问题,其中包含相关的代码示例,但问题与我在这里提出的问题不同。

有没有一种简单的方法可以在不创建应用程序的情况下在 Django 模板中显示 mysql 数据?

4

1 回答 1

2

您需要将类别查询集添加到您的HomeView. 请记住,视图使用模板来构建响应 - 包括您也在不同视图中使用的模板 ( IndexView) 不会导致与IndexView.

HomeView通过渲染模板产生它的响应。如果该模板使用{% include %}标签来拉入其他模板的片段,则这些片段将使用由HomeView. 您所做的任何事情都不IndexView会对 产生任何影响HomeView,反之亦然。

继续通过类比字符串插值进行推理,假设您的模板是全局字符串变量而不是磁盘上的文件。你的情况是这样的:

base_categories = "My categories are: %(categories)s."
base_right_panel = "This is the right panel.  Here are other fields before categories."

使用 {% include %} 标记类似于字符串连接:

base_right_panel = base_right_panel + base_categories

那么你的两种观点与此类似:

def home_view(request):
    context = {}
    return base_right_panel % context

def index_view(request)
    context = {'categories': ['a', 'b', 'c']}
    return base_categories % context

除非您将查询集添加categories到 中的上下文中HomeView,否则在呈现响应时模板引擎将无法使用它。

您的HomeView课程应该包括get_context_data您当前在IndexView. 我不确定您是否真的需要IndexView,除非您想要仅使用类别列表为该页面提供服务的东西。

于 2013-07-22T18:47:50.260 回答