Django 没有加载我定义的 URL

Posted

技术标签:

【中文标题】Django 没有加载我定义的 URL【英文标题】:Django is not loading the URL I defined 【发布时间】:2022-01-10 21:19:01 【问题描述】:

我正在开发一个生成动态 url 的项目,例如。如果我输入 127.0.0.1:8000/newpage 它会生成一个带有 slug newpage

的新模型

之前项目运行良好,但突然开始出现一些错误。 我正在使用这样的 ajax 调用 URL (第 5 行)

$(document).on('click', '#save', function (e) 
            e.preventDefault();
            $.ajax(
                type: 'POST',
                url: '% url "text:update" %',
                data: 
                    newText: $('#text-content').val(),
                    slug: " obj.slug ",
                    csrfmiddlewaretoken: "csrf_token",
                    action: 'post'
                ,
                success: function (json) 
                    if (json['status'] === 'OK') 
                        document.getElementById('msg-box').innerText = 'TEXT SAVED';
                        window.removeEventListener("beforeunload", beforeUnloadListener,  capture: true );

                    
                ,
                error: function (xhr, errmsg, err) 

                
            );
        );

它应该加载我在更新 url 模式中定义的视图,但由于某种原因,它仍在加载我的 slug 视图并使用 slug 更新生成一个新 url,我的意思是如果我告诉它它不应该这样做以 URL 模式加载特定视图,那么为什么它仍然在下面加载 slug 视图是我的 urls.py:

#Only patterns
path('', home, name='home'),
path('<slug:slug>/', textview, name='textview'),
path('update/', update, name='update'),

views.py


def textview(request, slug):
    obj, created= Text.objects.get_or_create(slug=slug, defaults='text':'', 'password':'123')
    return render(request, 'text/textpage.html', 'obj' : obj, 'created' : created)

def update(request):
    if request.POST.get('action') == 'post':
        slug = request.POST.get('slug')
        text = request.POST.get('newText')
        obj = Text.objects.get(slug=slug)
        obj.text = text
        obj.save()
        response = JsonResponse('status':'OK','text':text)
        return response
     

【问题讨论】:

请添加您的观点代码 这能回答你的问题吗? Django Create View URL conflicts with Single View URL。 "update" 是一个有效的 slug,因此被 textview 路径捕获,将 update 路径放在它之前,以便首先匹配 @IainShelvington 我做到了,它工作得非常好,但问题是当我生成带有更新作为 slug 的动态 url 时,它将加载更新视图而不是创建视图让我添加视图文件给你一个想法 @AliIrani 我已添加视图文件 如果 slug 可以等于“更新”,您应该将 url-shema 更改为没有冲突的 url。例如,您可以使用 text/&lt;slug:slug&gt;/ 之类的东西... 【参考方案1】:

您在哪里使用此 AJAX 代码?如果它在 javascript 文件 (.js) 中,Jinja 将无法在那里工作,因此您必须编写绝对 URL,或者您必须在 HTML 中为 Jinja 定义一个变量,然后在 JS 文件中使用该变量。

如果您的APPEND_SLASHsettings.py 中不是 True,请尝试在 URL 后添加斜杠。

【讨论】:

AJAX 在 HTML 中的

以上是关于Django 没有加载我定义的 URL的主要内容,如果未能解决你的问题,请参考以下文章

姜戈 |无法访问没有尾随“/”的 URL

Django没有从静态目录加载样式文件

在 Django 中有没有办法根据一些预定义的变量只公开一定范围的 URL?

为啥 Django 试图打开一个我没有告诉它的 URL?

图片未加载 Django 网站

django 改了静态文件但是页面没有变