在Django中过滤项目组并显示组

时间:2017-05-26 19:56:09

标签: python django

我试图为我的矿物网站显示导航菜单。导航将显示可用矿物类别的列表。点击'类别的用户'将看到该类别中每种矿物的清单。

我试图通过模板标签完成此操作,但没有打印,在django调试栏中我没有看到SQL正在执行 - 所以不确定问题是什么。

我的矿物模型

class Mineral(models.Model):
    name = models.CharField(max_length=100, unique=True)
    image_filename = models.CharField(max_length=255)
    image_caption = models.CharField(max_length=255)
    category = models.CharField(max_length=255)
    formula = models.CharField(max_length=255)
    strunz_classification = models.CharField(max_length=255)
    crystal_system = models.CharField(max_length=255)
    unit_cell = models.CharField(max_length=255)
    color = models.CharField(max_length=255)
    crystal_symmetry = models.CharField(max_length=255)
    cleavage = models.CharField(max_length=255)
    mohs_scale_hardness = models.CharField(max_length=255)
    luster = models.CharField(max_length=255)
    streak = models.CharField(max_length=255)
    diaphaneity = models.CharField(max_length=255)
    optical_properties = models.CharField(max_length=255)
    refractive_index = models.CharField(max_length=755)
    crystal_habit = models.CharField(max_length=255)
    specific_gravity = models.CharField(max_length=255)

我的模板标签

 from django import template

register = template.Library()

categories = ["Silicates", "Oxides", "Sulfates", "Sulfides", "Carbonates", "Halides", "Sulfosalts", "Phosphates",
              "Borates", "Organic Minerals", "Arsenates", "Native Elements", "Other"]


@register.inclusion_tag('minerals/mineral_nav.html')
def nav_minerals_list():
    return {'categories': categories}

mineral_nav.html

{% for category in categories %}
    <a href="{% url 'minerals:category' category=category%}">{{ category }}</a>
{% endfor %}

类别网址

url(r'^(?P<category>[\w\s]+)/$', views.search_category, name='category')

search_category view

def search_category(request,category):
    minerals = Mineral.objects.filter(category__iexact=category)
    return render(request,'minerals/mineral_list.html', {'minerals':minerals})

然后只是尝试在我的主页上调用菜单:

 {%nav_minerals_list%}

注意我也肯定在我的html页面中导入模板标签。

任何想法?

更新 - 我修复了模板标签,但我收到以下错误:

NoReverseMatch at /
Reverse for 'category' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['minerals/(?P<category>[a-zA-Z])/$']

更新2 - 我已经将代码改变了一点,我认为是一个更好的形式,但我仍然得到一个新的反向匹配错误。错误如下:

NoReverseMatch at /
Reverse for 'category' with arguments '()' and keyword arguments '{'category': 'Silicates'}' not found. 1 pattern(s) tried: ['minerals/(?P<category>[a-zA-Z])/$']

所以猜测一个好的迹象表明它正在挑选一个类别名称,但仍然不确定为什么这不起作用。有什么想法吗?

更新3 注意到我的REGEX的URL问题已经改变了。我现在已经使用链接正确打印了类别,以便它们转到正确的URL - 即(http://localhost:8000/minerals/Silicates/)但是该类别的矿物列表没有打印出来

2 个答案:

答案 0 :(得分:0)

像这样使用

{% nav_minerals_list %}

有关详情,请参阅此链接https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

答案 1 :(得分:0)

在你的li标签中这样做,

{% for mineral in minerals %}
    <li><a href="{% url 'minerals:category' mineral.category %}">{{ mineral.category }}</a></li>
{% endfor %}