首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django将2个参数从HTML模板传递到视图函数

Django将2个参数从HTML模板传递到视图函数
EN

Stack Overflow用户
提问于 2020-02-05 06:09:09
回答 1查看 754关注 0票数 0

我想传递两个参数给我的view函数,以便从表中删除特定的记录。

有一个M2M连接,我想在上面工作,所以我必须为2个不同的对象传递2个参数。

型号:

代码语言:javascript
复制
class Products(models.Model):
     name = models.CharField(max_length=50)
     price = models.DecimalField(max_digits=100, decimal_places=2, blank=True)

class Meals(models.Model):
     name = models.CharField(max_length=40)
     ingredient = models.ManyToManyField(Products, related_name="products")

视图:

代码语言:javascript
复制
def remove_ingredient(request, pk, name):
     meal = Meals.objects.get(pk=pk)
     prod = Products.objects.get(name=name)
     meal.ingredient.remove(prod)
     return HttpResponse(status=204)

url模式:

代码语言:javascript
复制
urlpatterns = [ 
    path("meal_detail/<int:pk>/",MealDetailView.as_view(), name="meal_detail" ),
    path("meal_detail/<int:pk>/", remove_ingredient, name="remove_ingredient")
]

HTML模板:

代码语言:javascript
复制
 <a class="hyperlink-off" href="{% url 'remove_ingredient' pk=object.pk  name=ingredient.name %}">
       Remove
 </a>

正如你所看到的,我想从超文本标记语言模板向我的函数传递两个参数( Meal的主键和我想从Meals.ingredient中删除的产品名称)。

但在同一时间,URL模式正在接收2个参数,当它只需要一个参数时,它会尝试基于这两个参数生成指向网站的链接。我甚至试图通过传递HttpResponse(status=204)来强制函数停留在同一页上。

如何排除从HTML传递到urls.py的参数之一,或者是否有其他方法可以将变量从html模板传递到视图函数?

EN

回答 1

Stack Overflow用户

发布于 2020-02-05 07:04:35

您应该在您的remove_ingredient网址中使用re_path,并且还应考虑对网址进行描述性说明,以便用户可以看到该操作。

代码语言:javascript
复制
urlpatterns = [ 
    path("meal_detail/<int:pk>/", MealDetailView.as_view(), name="meal_detail" ),
    re_path("^meal_detail/<int:pk>/remove/(?P<name>\w+)/$", remove_ingredient, name="remove_ingredient")
]

另一件要考虑的事情是,更改应用程序状态的操作,例如像这样更改数据库中的数据,实际上应该作为POST请求来完成,因为这使您能够利用django的安全特性,如CSRF保护。

您不希望系统中更改数据的内容暴露&如果有人发现可以从您的web应用程序外部请求的URL来更改您的数据,则容易受到攻击。

这里有更多关于这方面的阅读;https://softwareengineering.stackexchange.com/questions/188860/why-shouldnt-a-get-request-change-data-on-the-server

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60066254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档