好吧,所以我试图在我的createAnswer视图中包含相应的注释,当前createAnswer页的网址包含正确的pk ok注释,因此我需要通过url中的ID来获取注释。
我的通用CreateView如下所示:
class createAnswer(CreateView):
model = Answer
fields = ['content']
def getComment(self, request):
???
comment = getComment()
def get_success_url(self):
this_path = self.request.get_full_path()
path_list = this_path.split('/')
def get_comment_id(self):
for i in range(len(path_list)):
if path_list[i].isdigit():
return path_list[i]
return '/blogcontact/comment/'+ get_comment_id(self)
def form_valid(self,form):
this_path = self.request.get_full_path()
path_list = this_path.split('/')
def get_comment_id(self):
for i in range(len(path_list)):
if path_list[i].isdigit():
return path_list[i]
form.instance.author = self.request.user
form.instance.comment = Comment.objects.get(id=get_comment_id(self))
return super().form_valid(form)
我的Urls.py看起来像这样:
from django.urls import path
from . import views
from .views import createAnswer
urlpatterns = [
path('contact/comment/<int:pk>/newanswer', createAnswer.as_view(),
name='answer-create')
]<br>
我想将Comment对象保存在一个变量中,以便可以在{{comment}}这样的html模板中使用它
答案 0 :(得分:0)
我认为您正在使函数视图和基于类的视图(CBV)混淆,并且您从不导入请求,它只是视图接收的参数。
在功能视图中,请执行以下操作:
def my_view(request):
if request.method == 'POST':
# do some stuff
对于CBV,每种方法都是一个函数:
from django.views.generic.edit import CreateView
class MyView(CreateView):
model = Answer
fields = ['content']
def get(self, request):
# do some stuff
def post(self, request):
# do some stuff
编辑:要在基于类的视图中访问url参数,请使用self.kwargs,因此您可以通过self.kwargs ['pk']访问注释pk。现在,您只需要获取注释并将其添加到上下文数据中即可:
class CreateAnswer(CreateView):
model = Answer
fields = ['content']
def get_context_data(self, **kwargs):
kwargs['comment'] = Comment.objects.get(pk=self.kwargs['pk'])
return super().get_context_data(**kwargs)
def form_valid(self, form):
# do some stuff