首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django从模板导入模型

Django从模板导入模型
EN

Stack Overflow用户
提问于 2014-08-14 04:13:45
回答 1查看 3.3K关注 0票数 2

在我的django项目中,我有一个扩展,我所有的模板{% base.html 'base.html‘%}都来自它。在基本模板中,我想对我所有算法列表执行此操作。

代码语言:javascript
复制
{% for algorithm in algorithms %}
   # list them out as links in nav bar
{% endfor %}

但我不会将算法传递给库,因为它只是扩展了其他模板。

我不知道怎么解决这个问题。我的想法是在基本模板中使用{% load %},这基本上会。

代码语言:javascript
复制
from algorithms.models import Algorithm
from django import template


register = template.Library()

def GetAlgorithmObjects():

  a = Algorithm.objects.all()

  return {'algorithms': a}

我不确定load是如何工作的,这可以解释这个失败。你将如何实现这一点,或者我应该走一条不同的道路。

EN

回答 1

Stack Overflow用户

发布于 2014-08-14 04:26:57

实际上,您可能希望创建一个上下文处理器来为所有模板提供算法对象。context_processors只是一些返回对象的函数,这些对象将在任何视图中用作上下文。下面是你需要的代码:

在本例中,我的应用程序名为core。我在应用程序中有一个名为context_processors的python文件,函数是myuser。下面是我的函数代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
TEMPLATE_CONTEXT_PROCESSORS = (
    # other default context processors
    'core.context_processors.myuser',
    )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25295276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档