在我的django项目中,我有一个base.html,我的所有模板{%extends' base.html' %}。在该基本模板中,我想将此作为我所有算法的列表。
{% for algorithm in algorithms %}
# list them out as links in nav bar
{% endfor %}
但是我没有将算法传递到基础,因为它只是扩展其他模板。
我不知道如何解决这个问题。我的想法是在基本模板中使用{%load%},基本上就是这样。
from algorithms.models import Algorithm
from django import template
register = template.Library()
def GetAlgorithmObjects():
a = Algorithm.objects.all()
return {'algorithms': a}
我不确定负载是如何工作的,这可以解释这种失败。你将如何实际实现这一点,或者我应该走另一条道路。
答案 0 :(得分:1)
您实际上想要创建一个上下文处理器来为所有模板提供算法对象。 context_processors只是返回在任何视图中用作上下文的对象的函数。所以这是您需要的代码:
对于此示例,我的应用程序名为core
。我在应用程序中有一个名为context_processors
的python文件,函数为myuser
。这是我的功能代码:
from django.contrib.auth.models import User
from .models import MyUser
def myuser(request):
try:
user = User.objects.get(pk=request.user.pk)
except User.DoesNotExist:
user = None
if user:
myuser = MyUser.objects.get(user=user)
return {'myuser': myuser}
else:
# load a default user for testing
myuser = MyUser.objects.all()[0]
return {'myuser': myuser}
myuser()
函数只返回我的扩展用户模型。我创建了这个,所以我可以在所有模板中使用MyUser
对象。
然后将此context_processor
添加到settings.py
:
TEMPLATE_CONTEXT_PROCESSORS = (
# other default context processors
'core.context_processors.myuser',
)
答案 1 :(得分:1)
您可以使用包含标记https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags
进行制作在您的应用algorithms
创建目录templatetags
并在其中放入一个名为algorithms_tags.py
的文件(当然在此目录中必须有一个名为__init__.py
的文件)
然后该文件的内容与您所写的内容类似:
from algorithms.models import Algorithm
from django import template
register = template.Library()
@register.inclusion_tag('algorithms/show_algorithms.html')
def show_algorithms():
a = Algorithm.objects.all()
return {'algorithms': a}
然后,您需要一个位于algorithms/templates/algorithms/show_algorithms.html
的模板,其中包含以下内容:
{% for algorithm in algorithms %}
# list them out as links in nav bar
{% endfor %}
您可以在base.html
中使用它,如下所示:
{% load algorithms_tags %}
{% show_algorithms %}
一些解释:
{% load algorithms_tags %}
中,“algorithms_tags”是.py
目录中创建的templatetags
文件的名称(不带扩展名){% show_algorithms %}
中,“show_algorithms”是register.inclusion_tag
inclusion_tag.py
修饰的函数的名称