在我的django项目中,我有一个扩展,我所有的模板{% base.html '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}
我不确定load是如何工作的,这可以解释这个失败。你将如何实现这一点,或者我应该走一条不同的道路。
发布于 2014-08-14 04:26:57
实际上,您可能希望创建一个上下文处理器来为所有模板提供算法对象。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
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
# other default context processors
'core.context_processors.myuser',
)
https://stackoverflow.com/questions/25295276
复制相似问题