【问题标题】:url to fetch with parameter for django view使用参数获取 django 视图的 url
【发布时间】:2021-08-09 05:24:50
【问题描述】:

在尝试使用 AJAX 而不是 href 链接时,我的 javascript 代码出现问题。

我需要点击一个看起来像这样的 django url (Django 2.2):

path('one-time/<str:product_url>/', OneTimeProductView.as_view(), name='one_time_product')

django 模板中的原始代码是:

<a href="{% url 'one_time_product' product %}">{{product}}</a>

我现在想使用 ajax 调用让整个过程在模态框内打开。在我的 javascript 代码中,我的 fetch 函数如下所示:

   function handleAccess(){
    var url = "{%  url 'one_time_product' product %}" ;
    fetch(url, {
            method: "POST",
            headers: {
                "X-CSRFToken": '{{csrf_token}}',
                "Accept": "application/json",
                "Content-Type": "application/json"
            }
        })
        .then (response => {
            response.json();
        })
        .then (data => {
            console.log(data);
        })
};

我知道我缺少与 url 变量中的参数相关的东西,但我只是不知道如何正确添加它以适应 url 路径。

这是我点击按钮时遇到的错误

NoReverseMatch at /one-time/ Reverse for 'one_time_product' 没有 未找到论据。尝试了 1 种模式: ['one\-time\/(?P[^/]+)\/$']

fetch函数中的url应该怎么写?

我将不胜感激,任何人都可以在这里为我指明正确的方向。

谢谢

【问题讨论】:

  • 谁调用handleAccess?原始链接元素是否有onclick?

标签: javascript django url fetch


【解决方案1】:

您在 URL 定义 (product_url) 中有一个命名参数。

在我看来,你应该像这样使用 url 模板标签:

var url = "{%  url 'one_time_product' product_url=product.url %}" ;

product.url 更改为您的产品型号中的实际网址(或 slug)。

【讨论】:

  • 不确定实际网址的格式。从视图文件来看,这是预期的: def get(self, request, product_url=None): site = get_current_site(request) if product_url: context = {} pro_access = "Anonymous" try :
【解决方案2】:

这是一个棘手的问题。 我用后端开发解决了它。

var url = "{%  url 'one_time_product' product_url=0 %}".replace('0', {{ product }}) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2022-08-18
    • 2013-03-23
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多