【问题标题】:Django is not loading the URL I definedDjango 没有加载我定义的 URL
【发布时间】: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;/ 之类的东西...

标签: python django django-views django-urls


【解决方案1】:

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

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

【讨论】:

  • AJAX 在 HTML 中的
猜你喜欢
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多