带有动态 app_label 的 django url 标签
django url tag with dynamic app_label
我正在尝试为基于 class 的列表视图创建动态 url 标签。在它循环的每个列表项上都需要一个删除按钮。问题是我在多个应用程序中使用此模板并想重复使用它。
目前有效的是:
[filename.html]
{% for file in object_list %}
<tr>
<td>{{file.stream}} </td>
<td>{{file.regExpFilename}}</td>
<form class="delete-form" method="POST" action="{% url 'MyApp1:filenames_delete' pk=file.stream %}">
<button type="submit" value="delete" class="btn-delete"
onclick="return confirm('Are you sure to delete {{file.stream}} {{file.regExpFile}}?')">
Delete
</button>
core.urls.py
"Filename":[
path('filenames/', views.FilenameView.as_view(), name='filenames'),
path('filenames/create', views.FilenameCreateView.as_view(), name='filenames_create'),
path('filenames/delete/<pk>', views.FilenameDeleteView.as_view(), name='filenames_delete'),
core.views.filenames.py
class FilenameView(generic.ListView):
def get_context_data(self, **kwargs) -> dict:
model_name = self.model._meta.model_name
context = super().get_context_data(**kwargs)
app_label = self.model._meta.app_label
context["create_url"] = reverse("{}:filenames_create".format(app_label))
return context
但我想删除 'MyApp' 以使其可重复用于多个应用程序。
非常感谢,
您可以创建 custom template processor:
def apps_context_processor(request):
return {
'item_delete_url': reverse(f'{request.resolver_match.app_name}:filenames_delete')
}
然后在您的模板 url
标记中使用它。
我正在尝试为基于 class 的列表视图创建动态 url 标签。在它循环的每个列表项上都需要一个删除按钮。问题是我在多个应用程序中使用此模板并想重复使用它。 目前有效的是: [filename.html]
{% for file in object_list %}
<tr>
<td>{{file.stream}} </td>
<td>{{file.regExpFilename}}</td>
<form class="delete-form" method="POST" action="{% url 'MyApp1:filenames_delete' pk=file.stream %}">
<button type="submit" value="delete" class="btn-delete"
onclick="return confirm('Are you sure to delete {{file.stream}} {{file.regExpFile}}?')">
Delete
</button>
core.urls.py
"Filename":[
path('filenames/', views.FilenameView.as_view(), name='filenames'),
path('filenames/create', views.FilenameCreateView.as_view(), name='filenames_create'),
path('filenames/delete/<pk>', views.FilenameDeleteView.as_view(), name='filenames_delete'),
core.views.filenames.py
class FilenameView(generic.ListView):
def get_context_data(self, **kwargs) -> dict:
model_name = self.model._meta.model_name
context = super().get_context_data(**kwargs)
app_label = self.model._meta.app_label
context["create_url"] = reverse("{}:filenames_create".format(app_label))
return context
但我想删除 'MyApp' 以使其可重复用于多个应用程序。
非常感谢,
您可以创建 custom template processor:
def apps_context_processor(request):
return {
'item_delete_url': reverse(f'{request.resolver_match.app_name}:filenames_delete')
}
然后在您的模板 url
标记中使用它。