如何 Link 具有基于 class 的视图的 url 的模板?
How to Link a template with the url of a class-based-view?
我正在尝试创建一个 link <a>
将我重定向到视图 DeleteView
的 url。我希望 link 出现在我的应用程序模板中。通过单击 link,您将被重定向到 DeleteView
.
的 url
这是删除视图:
class imagenDelete(DeleteView):
model = imagen
def get_id(self, request):
getall = imagen.objects.all()
这是urls.py:
urlpatterns = [
path('', views.galeria, name='galeria'),
path('delete/<int:pk>', views.imagenDelete.as_view(), name='deletegaleria'),
]
这是我试图在我的应用程序模板中创建的 link:
<a style="font-size: 3rem;" href="{% url 'deletegaleria' pk %}">Click to delete</a>
问题是,在 url 中,我必须传递要删除的图像的 ID。如果我这样写 {% url 'deletegaleria' 14 %}
就可以了,te link 显示在模板中,它会将您重定向到 url 以删除 id = 14.[=23 的图像=]
如果我这样做:
{% for on in getall %}
<a style="font-size: 3rem;" href="{% url 'deletegaleria' o.id %}">Click to delete</a>
{% endfor %}
这不会给我任何错误,但不会在模板中显示 link。
如果我这样做 {% url 'deletegaleria' pk %}
基本上没有迭代,我会得到下一个错误:
Reverse for 'deletegaleria' with arguments '('',)' not found. 1 pattern(s) tried: ['galeria/delete/(?P[0-9]+)$']
@SpaceCat69-
首先,让我明白一点。我想你想要的是这个
- 您有一个将呈现所有数据的列表视图。假设您的数据采用 table 格式。每行
旁边会有删除link
- 单击删除 link 时,它应该重定向到删除视图。
- 因此,您需要向我们展示您如何呈现对象的列表视图。
为什么还要在删除视图中创建 get_id?它的作用是什么?为什么要在 DeleteView 中传递整个模型查询集。您的 DeleteView 应该有一个基于 URL.
中传递的 kwargs 的查询集
还有,你的 deleteview 不完整
deleteView 示例
class ProductDelete(LoginRequiredMixin, SuccessMessageMixin, DeleteView):
# specify the model you want to use
model = Product
template_name = "catalog/product/delete_product.html"
success_message = "Product Deleted Successfully"
def get_success_url(self):
return reverse("catalog:product_list")
你有
path('delete/<int:pk>', views.imagenDelete.as_view(), name='deletegaleria'),
所以你必须在模板中使用 pk
{% for on in getall %}
<a style="font-size: 3rem;" href="{% url 'deletegaleria' on.pk %}">Click to delete</a>
{% endfor %}
所以问题是我正在使用基于函数的视图来呈现我的模板,并使用 Class-基于视图来删除一些对象。
我为使其工作所做的工作仅适用于 class-based-views。
对于任何想知道下一段代码的作用的人:我创建了两个视图。一个用于显示图像。另一个显示了一个允许用户上传自己的图像的表单。当方法为 POST 时,我还保存了上传图像的用户。
稍后我创建了 DeleteView,只有当登录用户与上传图像的用户相同时,它才会删除图像。
views.py:
class galeriaListView(ListView):
model = imagen
template_name = "galeria/galeria.html"
imagenes = imagen.objects.all()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['imagenes'] = self.imagenes
return context
class formularioimagenListView(ListView):
model = imagen
formulario_subir_imagen = formulario_img()
template_name = "galeria/formulario_subir_imagen.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['formulario_subir_imagen'] = self.formulario_subir_imagen
return context
def post(self, request, *args, **kwargs):
formulario_subir_imagen = formulario_img(request.POST, request.FILES)
if formulario_subir_imagen.is_valid():
profile = formulario_subir_imagen.save(commit=False)
profile.autor = request.user
profile.save()
return redirect("/galeria/")
class imagenDelete(DeleteView):
model = imagen
success_url = "/galeria/"
template_name = "galeria/delete_imagen.html"
def dispatch(self, request, *args, **kwargs):
self.obj = self.get_object()
if self.obj.autor != self.request.user:
return HttpResponseForbidden("Cannot delete other's posts")
return super(imagenDelete, self).dispatch(request, *args, **kwargs)
urls.py:
path('', views.galeriaListView.as_view(), name='galeria'),
path('<pk>/delete/', views.imagenDelete.as_view(), name='deleteimagen'),
path('subir_imagen', views.formularioimagenListView.as_view(), name='subirimagen'),
path('borrar_imagen', views.borrar_imagenListView.as_view(), name='opcionesimagenesaborrar'),
模板中的 <a>
看起来像这样。
template.html:
<a style="font-size: 3rem;" href="{% url 'subirimagen' %}">Click para subir imagen</a>
<a style="font-size: 3rem;" href="{% url 'opcionesimagenesaborrar' %}">Click para borrar tus imagenes</a>
我正在尝试创建一个 link <a>
将我重定向到视图 DeleteView
的 url。我希望 link 出现在我的应用程序模板中。通过单击 link,您将被重定向到 DeleteView
.
这是删除视图:
class imagenDelete(DeleteView):
model = imagen
def get_id(self, request):
getall = imagen.objects.all()
这是urls.py:
urlpatterns = [
path('', views.galeria, name='galeria'),
path('delete/<int:pk>', views.imagenDelete.as_view(), name='deletegaleria'),
]
这是我试图在我的应用程序模板中创建的 link:
<a style="font-size: 3rem;" href="{% url 'deletegaleria' pk %}">Click to delete</a>
问题是,在 url 中,我必须传递要删除的图像的 ID。如果我这样写 {% url 'deletegaleria' 14 %}
就可以了,te link 显示在模板中,它会将您重定向到 url 以删除 id = 14.[=23 的图像=]
如果我这样做:
{% for on in getall %}
<a style="font-size: 3rem;" href="{% url 'deletegaleria' o.id %}">Click to delete</a>
{% endfor %}
这不会给我任何错误,但不会在模板中显示 link。
如果我这样做 {% url 'deletegaleria' pk %}
基本上没有迭代,我会得到下一个错误:
Reverse for 'deletegaleria' with arguments '('',)' not found. 1 pattern(s) tried: ['galeria/delete/(?P[0-9]+)$']
@SpaceCat69- 首先,让我明白一点。我想你想要的是这个
- 您有一个将呈现所有数据的列表视图。假设您的数据采用 table 格式。每行 旁边会有删除link
- 单击删除 link 时,它应该重定向到删除视图。
- 因此,您需要向我们展示您如何呈现对象的列表视图。
为什么还要在删除视图中创建 get_id?它的作用是什么?为什么要在 DeleteView 中传递整个模型查询集。您的 DeleteView 应该有一个基于 URL.
中传递的 kwargs 的查询集还有,你的 deleteview 不完整
deleteView 示例
class ProductDelete(LoginRequiredMixin, SuccessMessageMixin, DeleteView):
# specify the model you want to use
model = Product
template_name = "catalog/product/delete_product.html"
success_message = "Product Deleted Successfully"
def get_success_url(self):
return reverse("catalog:product_list")
你有
path('delete/<int:pk>', views.imagenDelete.as_view(), name='deletegaleria'),
所以你必须在模板中使用 pk
{% for on in getall %}
<a style="font-size: 3rem;" href="{% url 'deletegaleria' on.pk %}">Click to delete</a>
{% endfor %}
所以问题是我正在使用基于函数的视图来呈现我的模板,并使用 Class-基于视图来删除一些对象。
我为使其工作所做的工作仅适用于 class-based-views。
对于任何想知道下一段代码的作用的人:我创建了两个视图。一个用于显示图像。另一个显示了一个允许用户上传自己的图像的表单。当方法为 POST 时,我还保存了上传图像的用户。 稍后我创建了 DeleteView,只有当登录用户与上传图像的用户相同时,它才会删除图像。
views.py:
class galeriaListView(ListView):
model = imagen
template_name = "galeria/galeria.html"
imagenes = imagen.objects.all()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['imagenes'] = self.imagenes
return context
class formularioimagenListView(ListView):
model = imagen
formulario_subir_imagen = formulario_img()
template_name = "galeria/formulario_subir_imagen.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['formulario_subir_imagen'] = self.formulario_subir_imagen
return context
def post(self, request, *args, **kwargs):
formulario_subir_imagen = formulario_img(request.POST, request.FILES)
if formulario_subir_imagen.is_valid():
profile = formulario_subir_imagen.save(commit=False)
profile.autor = request.user
profile.save()
return redirect("/galeria/")
class imagenDelete(DeleteView):
model = imagen
success_url = "/galeria/"
template_name = "galeria/delete_imagen.html"
def dispatch(self, request, *args, **kwargs):
self.obj = self.get_object()
if self.obj.autor != self.request.user:
return HttpResponseForbidden("Cannot delete other's posts")
return super(imagenDelete, self).dispatch(request, *args, **kwargs)
urls.py:
path('', views.galeriaListView.as_view(), name='galeria'),
path('<pk>/delete/', views.imagenDelete.as_view(), name='deleteimagen'),
path('subir_imagen', views.formularioimagenListView.as_view(), name='subirimagen'),
path('borrar_imagen', views.borrar_imagenListView.as_view(), name='opcionesimagenesaborrar'),
模板中的 <a>
看起来像这样。
template.html:
<a style="font-size: 3rem;" href="{% url 'subirimagen' %}">Click para subir imagen</a>
<a style="font-size: 3rem;" href="{% url 'opcionesimagenesaborrar' %}">Click para borrar tus imagenes</a>