自定义Django视图流url

dtcbnfnu  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(110)

我正在使用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就可以工作了(或者另一种解决方案)?

gev0vcfq

gev0vcfq1#

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

ff29svar

ff29svar2#

试试下面的代码

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>

相关问题