Django视图和助手

舞弊

我有一个使用MPTT包的django项目(相当简单),通过它我为特定模型创建类别。我正在创建一个基于MPTT的菜单系统,但是我发现自己在自己的视图中重复了我的代码,更具体地说:

def index(request):
menu = MyCategory.objects.all()

def viewitem(request, item_slug):
menu = MyCategory.objects.all()

是否应该将其重构为模板标签?我应该做一个助手功能吗?还是创建将对象传递给模板的中间件上下文?根据Django逻辑,哪种方法最好?从示例中非常简单,我仅返回一个mptt现有标签要使用的查询集:

{% if menu.exists %}
<nav id="topnavigation">
<ul>
    {% spaceless %}
    {% recursetree menu %}
    <li>
        <a href="{% url 'view-category' node.slug %}">{{ node.title }}</a>
        {% if not node.is_leaf_node %}
        <ul class="submenu">
            {{ children }}
        </ul>
        {% endif %}
    </li>
    {% endrecursetree %}
    {% endspaceless %}
</ul>
</nav>
{% endif %}
没有人

Django的方法是使用基于类的视图并创建自定义的Mixin来包含重复的代码。因此,Mixin可能如下所示:

class MenuContextMixin(object):
    def get_context_data(self, **kwargs):
        context = super(MenuContextMixin, self).get_context_data(**kwargs)
        context['menu'] = MyCategory.objects.all()
        return context

其用法如下:

class IndexView(MenuContextMixin, TemplateView):
    template_name = "index.html"

由于您使用的是基于函数的视图,因此我认为最好的解决方案是编写一个辅助函数来扩展上下文。例如views.py:

def get_extra_context():
    return {
        'menu': MyCategory.objects.all(),
    }

def index(request):
    ...
    context.update(get_extra_context())
    return render_to_response('index.html', context)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

控制器和视图的助手

来自分类Dev

从助手Codeigniter加载视图?

来自分类Dev

RSpec视图规范:访问视图助手

来自分类Dev

Rails的“助手”非常特别地是视图助手

来自分类Dev

Fluid-Alias-View-Helper和另一个视图助手的结果

来自分类Dev

Fluid-Alias-View-Helper和另一个视图助手的结果

来自分类Dev

视图助手插件的多个实例?

来自分类Dev

Phoenix / Elixir测试视图助手

来自分类Dev

从视图中调用助手方法

来自分类Dev

XML 视图事件处理程序助手

来自分类Dev

如何从自定义视图助手中使用ZF2视图助手

来自分类Dev

如何测试视图助手呈现局部视图?

来自分类Dev

流星模板和模板助手

来自分类Dev

整理路线和助手

来自分类Dev

全局助手功能和导出功能

来自分类Dev

嵌套助手功能和性能

来自分类Dev

分配用户和“选择”助手

来自分类Dev

Rails 4和Mongoid:约会助手

来自分类Dev

{{link-to}}助手问题传递的对象的渲染视图

来自分类Dev

在视图助手中部分渲染为String

来自分类Dev

在自定义视图助手中进行验证

来自分类Dev

如果ELSE html助手在剃刀视图中?

来自分类Dev

如何在<%= for%>视图助手中增加ID

来自分类Dev

将ModelExpression从标签助手传递到局部视图

来自分类Dev

{{link-to}}助手问题传递的对象的渲染视图

来自分类Dev

在自定义视图助手中进行验证

来自分类Dev

使用ejs视图助手为字段添加属性

来自分类Dev

流星js | 通过助手在视图中显示Json

来自分类Dev

在视图中调用命名路由助手以NameError结尾