2017-05-26 156 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])/ $'] –