带有动态 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 标记中使用它。