Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django更新视图似乎只适用于正则表达式URL_Django - Fatal编程技术网

Django更新视图似乎只适用于正则表达式URL

Django更新视图似乎只适用于正则表达式URL,django,Django,我正在使用Django,我有一个简单的用例,在这个用例中,我必须创建一个基于函数的视图来更新模型。以下是我的基于函数的查看函数: def update_post(request, id=None): obj = get_object_or_404(PostModel, id=id) form = PostModelForm(request.POST or None, instance=obj) if form.is_valid(): obj = form.

我正在使用Django,我有一个简单的用例,在这个用例中,我必须创建一个基于函数的视图来更新模型。以下是我的基于函数的查看函数:

def update_post(request, id=None):
    obj = get_object_or_404(PostModel, id=id)
    form = PostModelForm(request.POST or None, instance=obj)
    if form.is_valid():
        obj = form.save(commit=False)
        print(f"The object that i am going to save is {form.cleaned_data}")
        obj.save()
        messages.success(request, f"Updated object with id {id}")
        return HttpResponseRedirect(f"/blog/read/{id}")
    context = {
        "form": form
    }
    return render(request, "blog/update-post.html", context)
下面是我的更新-post.html:

<html>
<form method="POST" action="."> {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value="Change">
</form>

</html>

{%csrf_令牌%}
{{form.as_p}}
这是我的URL.py文件:

from django.urls import path, include
from django.conf.urls import url
from .views import list_posts, read_post, create_post, update_post

app_name = "blog"

urlpatterns = [
    path('posts/', list_posts, name="list"),
    path('read/<int:id>', read_post, name="read"),
    path("create/", create_post, name="create"),
    #url(r'^(?P<id>\d+)/edit/$', update_post, name="update")
    path("update/<int:id>", update_post, name="update"),
]
从django.url导入路径,包括
从django.conf.url导入url
from.views导入列表帖子、读取帖子、创建帖子、更新帖子
app_name=“博客”
URL模式=[
路径('posts/',list_posts,name=“list”),
路径('read/',read_post,name=“read”),
路径(“创建/”,创建帖子,name=“创建”),
#url(r'^(?P\d+)/edit/$,update\u post,name=“update”)
路径(“update/”,update_post,name=“update”),
]
只有当我使用上面的正则表达式url模式来编辑文章时,更新视图才起作用

否则,我会收到以下错误消息:


有人能告诉我哪里出了问题。

但是这里你没有包含主键:你的url是
/blog/update
?是的,但是我如何包含主键?我需要把它放在哪里?在模板或视图中?您可以将其写入
action=“
”,但通过使用
action=“.”
可以转到“目录”。您只需在此处省略
操作=“
。非常感谢。这里的逻辑是什么?我应该经常使用action=“”??或者action有一个用例=“.too?那么
意味着如果路径是
/foo/bar
,它将指向
/foo
,这可能会有一个用例,具体取决于您实现Web服务器的方式,但我认为基于您编写
URL.py
的方式,可能不在这里。但在这里您没有包含主键:您的url是
/blog/update
?是的,但如何包含主键?我需要把它放在哪里?在模板或视图中?您可以将其写入
action=“
”,但通过使用
action=“.”
可以转到“目录”。您只需在此处省略
操作=“
。非常感谢。这里的逻辑是什么?我应该经常使用action=“”??或者action有一个用例=“.too?那么
意味着如果路径是
/foo/bar
,它将指向
/foo
,这可能有一个用例,这取决于您实现Web服务器的方式,但我认为基于您编写
URL.py
的方式,可能不在这里。