【问题标题】:Issue with django rendering data onto templateDjango将数据渲染到模板的问题
【发布时间】:2015-10-17 05:13:09
【问题描述】:

我正在尝试在 html 文件上呈现信息,但信息似乎无法正确通过。

在下面的 html 中,它应该呈现与其菜单标题相对应的项目。

例如

标题:甜点

商品:冰淇淋

描述:美味的巧克力冰淇淋洒

$:3.00


标题:电源

项目:咖喱

说明:咖喱很辣

$:10.00

我面临的问题是 menuitems 中的所有项目都出现在所有菜单标题下。标题呈现正常。

例如

标题:甜点

商品:冰淇淋

描述:美味的巧克力冰淇淋洒

$:3.00


标题:电源

商品:冰淇淋

描述:美味的巧克力冰淇淋洒

$:3.00

html

    {% for menu in menus %}
    <section id="services">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2 class="section-heading">Title {{ menu.title }}</h2>
                <hr class="primary">
            </div>
        </div>
    </div>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 text-center">
                {% for item in menuitems %}
                    <p>Item {{ item.item_name }}</p>
                    <p>Description {{ item.description }}</p>
                    <p>$ {{ item.price }}</p>
                {% endfor %}
            </div>
        </div>
    </div>
</section>    

    {% endfor %}

如何确保信息显示在正确的标题下?

views.py

def single(request, slug):
    user = request.user
    restaurant = Restaurant.objects.get(slug=slug)
    template = 'restaurants/single.html'
    menus = restaurant.menutitle_set.all()

    menuitems = MenuItem.objects.filter(title=menus)



    context = {
            'restaurant': restaurant,
            'menus': menus,
            'menuitems': menuitems,
    }
    return render(request, template, context)

models.py

class Restaurant(models.Model):
    user = models.CharField(max_length=250)
    restaurant_name = models.CharField(max_length=250)
    restaurant_address1 = models.CharField(max_length=250)
    restaurant_address2 = models.CharField(max_length=250)
    restaurant_state = models.CharField(max_length=120, choices=STATE_CHOICES)
    slug = models.SlugField(unique=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
        return self.restaurant_name

    def get_absolute_url(self):
        return reverse("single_restaurant", kwargs={"slug": self.slug})


class MenuTitle(models.Model):
    restaurant = models.ForeignKey(Restaurant)
    title = models.CharField(max_length=120)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)

    def __unicode__(self):
        return self.title


class MenuItem(models.Model):
    title = models.ForeignKey(MenuTitle)
    item_name = models.CharField(max_length=2000)
    description = MarkdownField(max_length=2000, null=True, blank=True)
    price = models.CharField(max_length=2000)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)

    def __unicode__(self):
        return self.item_name

admin.py

class MenuTitleInline(admin.StackedInline):
    model = MenuTitle
    extra = 1

class MenuItemInline(admin.StackedInline):
    model = MenuItem
    extra = 1

class RestaurantAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("restaurant_name",)}

    class Meta:
        model = Restaurant

    inlines = [MenuTitleInline]

admin.site.register(Restaurant, RestaurantAdmin)


class MenuTitleAdmin(admin.ModelAdmin):
    list_display = ["restaurant", "title"]
    class Meta:
        model = MenuTitle
    inlines = [MenuItemInline]

admin.site.register(MenuTitle, MenuTitleAdmin)

【问题讨论】:

    标签: django django-models django-templates django-admin django-views


    【解决方案1】:
    {% for item in menuitems %}
         <p>Item {{ item.item_name }}</p>
         <p>Description {{ item.description }}</p>
         <p>$ {{ item.price }}</p>
    {% endfor %}
    

    将此代码更改为 ,

    {% for item in menu.menuitem.all %}
       <p>Item {{ item.item_name }}</p>
       <p>Description {{ item.description }}</p>
       <p>$ {{ item.price }}</p>
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      尝试从视图中删除menuitems(或者只是不将menuitems 添加到上下文中)并将{% for item in menuitems %} 替换为{% for item in menu.menuitem_set.all %}

      【讨论】:

        【解决方案3】:

        正如@Geo Jacob 所建议的那样,进行了这些更改。同样在视图函数中,无需在上下文字典中设置“menuitems”变量。

        【讨论】:

          猜你喜欢
          • 2016-07-21
          • 2020-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-01
          • 1970-01-01
          • 2022-07-22
          相关资源
          最近更新 更多