2017-05-26 157 views
0

我正在尝试为我的网站的矿物显示导航菜单。导航栏将显示可用矿物类别的列表。点击“类别”的用户将看到该类别中每种矿物的列表。在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

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

search_category视图

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 -I've改变了代码张望了一下是什么,我相信会好一点表单,但我仍然收到一个新的反向匹配错误。错误如下:

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

所以猜猜它是拾取类别名称之一,但仍不知道为什么这不起作用的一个好兆头。有任何想法吗?

UPDATE 3 注意到我的REGEX出现了问题,导致URL发生了改变。我现在有种类打印出正确的链接,使他们将正确的网址 - 即(http://localhost:8000/minerals/Silicates/),但矿物质该类别列表中没有打印出

回答

0

使用这样

{% nav_minerals_list %} 

更多的是指该链接https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

+0

是你的权利woops,我仍然得到一个错误:反转找不到参数'()'和关键字参数'{}'的'category'。 1个模式尝试:['矿物/(?P [a-zA-Z])/ $'] –

+0

我将更新代码与该视图 –

0

做这样在你的L1标签,

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

谢谢 - 试过,并得到NoReverseMatch在/ 反向找不到'('',)'和关键字参数'{}'的'category'。尝试1种模式:['矿物质/(?P [a-zA-Z])/ $'] –