django 修改功能

修改功能(use generic views)陷入很多坑。需要记录一下。

1.使用 generic views.
(现在看来是不得不修改detail view ..还是使用 generic view)

  1. 其实很简单的,耽误很久,根据这个提示才算是醒悟。

1. models 里面:

  # 一定要定义这个方法,以及返回 reverse()。后面的forms是根据这个方法来传递视图的。
    def get_absolute_url(self):
        # id can't be used
        # return reverse('diary.views.detail', args=[str(self.id)])
        # reverse 'X', the "X" is "name" from ulrpatterns.
        # return reverse('note-detail', kwargs={'pk': self.pk})  # 就是陷在这里太深了。
        return reverse('diary:note-detail', kwargs={'pk': self.pk})  # 这个。。。二犯了。

2. urls.py

path('/update/', NoteUpdateView.as_view(), name='note-update'), # 这个name原来是很有用处的。

3. views

class NoteUpdateView(UpdateView):
    model = Note
    fields = ['title', 'content', 'image', 'files']
    # so ,html file at app/note_update_form.html
    template_name_suffix = '_update_form'  # 如果使用了后缀,就需要注意更改模板文件的名称。

4. my_update_form.html

# 关于< from action=" ???"> 这个问题
old: action="/update/"
new: action="/update/"
or: action="{% url 'diary:note-update' pk %}"
or : nothing # 这个才是正解。因为django把太勤劳了。基于类的模板实在太简介了。

5. 顺便把原来的details页面也修改了

from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView  # 这2行有一点点区别。
# 一旦使用了 DetailView, 就自动获得一个obejct 对象(上下文名字)。与最初的 tutor那部分很挂钩。
# 比如 {{ object.title }} 

其他需要注意的:

  1. 读文档,一定要按照从前往后,不能忽视细节。
  2. markdown 里面插入一个链接的正确方法是 先中括号后小括号:百度
  3. 常用的方法 get_absolute_url():
    Define a get_absolute_url() method to tell Django how to calculate the canonical URL for an object.
  4. 常用的方法 reverse():

reverse ('X', ), the "X" is "name" from ulrpatterns.
reverse(method,) method is from ulrpatterns
reverse 需要指定 app_name
使用 reverse()的话,推荐使用 pk

  1. 需要多读读文档中 ref 部分了。topic很啰嗦。
  2. 绕弯路,给自己找麻烦,给自己增加难度。是不是一件好事呢???

你可能感兴趣的:(django 修改功能)