Django从基于URL的模型列表中获取当前选定的模型

时间:2016-01-26 06:42:33

标签: python django django-models django-templates

我正在开发一个有几个模型的Django应用程序:父母,孩子,学校,CellPhones。每个父母" (这实际上是Django"用户"型号)可以有多个孩子,每个孩子可以有一个学校和一个CellPhone。

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

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

我的问题:

  1. 如何在页面导航到/ dashboard / 1后获取所选值,以便我可以将下拉值更改为当前选定的子项?
  2. 如何在整个layout.html文件中获取有关当前所选子项的信息?例如,侧边栏链接需要采用domain.com/schools/1domain.com/cellphones/1的形式,其中" 1"永远是孩子们的主要关键。表。此外,这个" sidebar.html"模板独立存在,仅包含在layout.html模板中。目前,我正在链接到/dashboard/1,因为我正在使用用户的ID迭代子数据库中的所有模型。
  3. 我已设法获取所有模板文件(包括sidebar.html)中所有子项的列表,但我很难根据URL /用户的选择获得单个模型。

1 个答案:

答案 0 :(得分:0)

  

如何在页面导航到后获取所选值   /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>