我试图为我的矿物网站显示导航菜单。导航将显示可用矿物类别的列表。点击'类别的用户'将看到该类别中每种矿物的清单。
我试图通过模板标签完成此操作,但没有打印,在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/)但是该类别的矿物列表没有打印出来
答案 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 %}