【问题标题】:Django get currently selected model from a list of models based on URLDjango 根据 URL 从模型列表中获取当前选择的模型
【发布时间】:2016-05-02 16:29:09
【问题描述】:

我正在开发一个 Django 应用程序,它有几个模型:父母、孩子、学校、手机。每个“父母”(本质上是 Django 的“用户”模型)可以有多个孩子,每个孩子可以拥有一所学校和一部手机。

我已经构建了我的网站以使其尽可能模块化。我的意思是导航模板在一个文件中,侧边栏模板(包含很多链接)在另一个文件中,所有这些都由一个 layout.html 文件组合在一起。

如果家长访问该网站,它会被重定向到domain.com/dashboard。在导航栏中,父母可以选择从下拉菜单中选择孩子。之后,父/用户将被重定向到domain.com/dashboard/1,其中“1”是子数据库表的主键。

我的问题:

  1. 页面导航到/dashboard/1后如何获取选中的值,以便将下拉值更改为当前选中的child?
  2. 我如何才能从整个 layout.html 文件中获得当前选定子级的信息?例如,侧边栏链接需要采用domain.com/schools/1domain.com/cellphones/1 的形式,其中这个“1”始终是“children”表的主键。此外,这个“sidebar.html”模板独立存在,仅包含在 layout.html 模板中。目前,我正确链接到 /dashboard/1 只是因为我正在使用用户 ID 遍历 Children 数据库中的所有模型。

我已设法获取所有模板文件(包括 sidebar.html)中所有子项的列表,但我正在努力根据 URL/用户的选择获取单个模型。

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

    页面导航到后如何获取选中的值 /dashboard/1,这样我就可以将下拉值更改为 当前选择的孩子?

    这是执行此操作的一种方法,但实际上您需要使用自定义模板标签来呈现您的下拉列表:

    <select>
       {% for st in studentlist %}
           <option value="{{ st.pk }}"
             {% if request.url.path|slice:":-1" == st.pk %}selected{% endif %}>{{ st }}</option>
       {% endfor %}
    </select>
    

    我如何才能从本质上获取有关当前所选内容的信息 整个 layout.html 文件中的子元素?

    您需要将其从视图传递给模板,作为上下文变量:

    def get_child_dashboard(request, pk=None):
         child = get_object_or_404(Child, pk=pk)
         return render(request, 'dashboard.html', {'child': child})
    

    现在,当您想要引用父级选择的子级时,在模板中的任何位置使用{{ child }},例如:

    <p>Hello, you are viewing the dashboard for {{ child.first_name }}</p>  
    

    【讨论】:

    • 谢谢。我的问题是这个 sidebar.html 模板(需要在其中包含带有 child_id 的链接)位于dashboard.html 模板之外。 “dashboard.html”模板只关注实际内容区域。这个想法是,当用户打开仪表板时,侧边栏会使用链接进行更新。说到这个,我可以从另一个视图中调用一个视图并告诉它在第一个视图渲染后渲染吗?
    • 模板不是视图;您需要通过覆盖在您的dashboard.html 中呈现另一个模板块(来自sidebar.html),以便它具有上下文 - 或使用模板标签获取对象并呈现来自sidebar.html 的内容 - 例如@ 987654329@
    • 再次感谢。我不可能将sidebar.html 放在dashboard.html 中——还有很多其他页面,例如dashboard.html,我不想在任何地方都包含sidebar.html。我一直在努力理解这些自定义包含标签。同样,当模板完全独立时,我如何在所有这些不同的页面中获得一个子模型实例?唯一的共同点是 URL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2014-04-03
    相关资源
    最近更新 更多