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/<slug:slug>/
之类的东西...
【参考方案1】:
您在哪里使用此 AJAX 代码?如果它在 javascript 文件 (.js) 中,Jinja 将无法在那里工作,因此您必须编写绝对 URL,或者您必须在 HTML 中为 Jinja 定义一个变量,然后在 JS 文件中使用该变量。
如果您的APPEND_SLASH
在settings.py
中不是 True,请尝试在 URL 后添加斜杠。
【讨论】:
AJAX 在 HTML 中的以上是关于Django 没有加载我定义的 URL的主要内容,如果未能解决你的问题,请参考以下文章