【发布时间】: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>/之类的东西...
标签: python django django-views django-urls