将模型属性传递给 Django 中的 URL

Posted

技术标签:

【中文标题】将模型属性传递给 Django 中的 URL【英文标题】:passing model attributes to URL in Django 【发布时间】:2021-02-03 11:40:36 【问题描述】:

我是 Django 新手。我有一个模型,其中包含 2 个字段,称为 id(作为 pk)和 region。我有一个页面来返回每个 region 中的对象。有 10 个区域,我需要将区域编号传递给 url 以从 db 过滤该区域中检索数据。 这是我的代码:

views.py

def render_pdf_view(request, *args, **kwargs):
pk = kwargs.get('pk')   *********here i need to get region from clicked button instead of pk*************
data = MyModel.objects.filter(region=pk)
template_path = 'pdf/Pdf.html'
context = 'data':data
return response

urls.py

path('pdf/<pk>/', render_pdf_view, name='pdf-data') ***I need to pass region instead of pk***

模板

<a href="% url 'application : pdf-data' ? %"> export pdf </a> 

我不知道如何将区域从单击按钮传递给查看,然后将其传递给 url。 任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

要将您的区域从模板传递到视图,您可以使用模板执行此操作;

<a href="% url 'application:pdf-data' object.region %"> export pdf </a>

那么URL路径需要指定区域;

path('pdf/<str:region>/', render_pdf_view, name='pdf-data')

然后视图可以使用该值。

def render_pdf_view(request, region, *args, **kwargs):

    data = MyModel.objects.filter(region=region)
    template_path = 'pdf/Pdf.html'
    context = 'data':data
    return response

【讨论】:

但是当我想在data = MyModel.objects.filter(region=region) 行中使用区域时,它不知道区域。而且在模板中,我可以从哪里找到对象?因为我有很多与每个区域相关的对象。 @markwalker_ 我遇到了这个错误:Reverse for 'pdf-data' with arguments '('',)' not found. 1 pattern(s) tried: ['pdf/(?P&lt;region&gt;[^/]+)/$']@markwalker_ 那么,如果您刚刚复制/粘贴了我的示例,则呈现模板的上下文不包括 object,因此您需要确保上下文与您所在的区域相符想要传递给那个 URL

以上是关于将模型属性传递给 Django 中的 URL的主要内容,如果未能解决你的问题,请参考以下文章

Django:两个模型中的一个 url 搜索(cbv)

Django将多个模型传递给模板

Django 将多个模型传递给一个模板

django:路由,模板,模型系统

反向 Django 管理 URL

将 WPF ValidationRule 的状态传递给 MVVM 中的视图模型