如何将kwargs传递给Django viewflow flowurl模板标签?

vptzau2j  于 2023-07-01  发布在  Go
关注(0)|答案(2)|浏览(127)

我正在使用django-viewflow应用程序,其中有一个自定义视图表示库存项目记录,其中有许多工作流可以附加到记录(注册/发布/处置等)。在记录的详细信息视图中,我希望有一个附加到项目的所有工作流的列表,并能够列出与该工作流相关的所有任务。
我的目标是一个URL,看起来像

  • .../asset/3/ -用于详细视图
  • .../asset/3/register/93/ -用于注册过程(以及后续任务)
  • .../asset/3/movement/1/ -用于移动流程(和后续任务)
  • 等等

我的应用程序url.py看起来像:

asset_urls = FlowViewSet(AssetFlow).urls
movement_urls = FlowViewSet(MovementFlow).urls

app_name = 'asset'
workflowurlpatterns = [
#    path('ajax/load-budget_lines/', views.load_budget_lines, name='ajax_load_budget_lines'),
    path('viewflow/', include((asset_urls, 'asset'))),
    path('movement/', include((movement_urls, 'movement'))),

#    path('', views.Detail.as_view(), name='detail'),
]

urlpatterns = [
    path('', views.List.as_view(), name='assets'),
    path('<int:asset_pk>/', views.Detail.as_view(), name='detail'),
    path('<int:asset_pk>/', include((workflowurlpatterns)))
]

问题是模板标记{% flowurl task user=request.user as task_url %}生成的所有URL都失败,并出现NoReverseMatch错误。
有没有一个聪明的方法来传递asset_id,这样URL就可以工作了(或者另一种解决方案)?
我得到的错误的一个例子是

Reverse for 'finance_tc' with keyword arguments '{'process_pk': 93, 'task_pk': 411}' not found. 1 pattern(s) tried: ['asset/(?P<asset_pk>[0-9]+)/register/(?P<process_pk>\\d+)/finance_tc/(?P<task_pk>\\d+)/$']
q5iwbnjs

q5iwbnjs1#

如果你在Django项目中使用URL命名空间,请确保在使用template标签时指定正确的命名空间。命名空间使用**”www.example.com“文件中的“app_name”属性定义urls.py,可以在模板标签中引用为“namespace:url_name”**。

0ve6wy6x

0ve6wy6x2#

试试下面的代码

from django.urls import path, include
from viewflow.flow.viewset import FlowViewSet
from .flows import AssetFlow, MovementFlow
from . import views

asset_urls = FlowViewSet(AssetFlow).urls
movement_urls = FlowViewSet(MovementFlow).urls

app_name = 'asset'
workflowurlpatterns = [
    path('register/<int:workflow_pk>/', include(asset_urls)),
    path('movement/<int:workflow_pk>/', include(movement_urls)),
]

urlpatterns = [
    path('', views.List.as_view(), name='assets'),
    path('<int:asset_pk>/', views.Detail.as_view(), name='detail'),
    path('<int:asset_pk>/', include(workflowurlpatterns)),
]

在django模板中使用

<a href="{{ task_url }}">{{ task.flow_class }}</a>

相关问题