Я не смог понять, почему шаблон url не может быть сопоставлен в Django
urls.py
tmp_urlpatterns = [
path('',MsgList.as_view(),name='user_inbox'),
path('outbox/',MsgOutbox.as_view(),name='user_outbox'),
path('<int:mid>/',MsgRead.as_view(),name='user_msgread'),
path('<int:mid>/reply/',MsgReply.as_view(),name='user_msgreply'),
path('send/<int:mid>/',MsgSend.as_view(),name='user_msgsend'),
]
models.py
class Message(models.Model):
sender = models.ForeignKey(User,models.CASCADE,related_name='outbox')
course = models.ForeignKey(Course,models.CASCADE,related_name='notices',null=True,default=None)
recipient = models.ForeignKey(User,models.CASCADE,related_name='inbox',null=True,default=None)
title = models.CharField('主旨',max_length=255)
body = models.TextField('內容')
created = models.DateTimeField('時間',auto_now_add=True)
def __str__(self):
return '{}: {}-{}'.format(self.id,self.sender,self.title)
class MessageStatus(models.Model):
message = models.ForeignKey(Message,models.CASCADE,related_name='status')
user = models.ForeignKey(User,models.CASCADE,related_name='read_list')
read = models.DateTimeField('閱讀時間',auto_now_add=True)
def __str__(self):
return '{}: {}-{} @{}'.format(self.id,self.message.sender,self.message.title,self.read)
views.py
class MsgReply(LoginRequiredMixin,CreateView):
extra_context = {'title':'回覆訊息'}
model = Message
fields = ['title','body']
def get_initial(self):
self.msg = Message.objects.get(id=self.kwargs['mid'])
return {
'title':'Re: '+self.message.title,
'body':'{}({}) 於 {} 寫道:\n> {}'.format(
self.msg.sender.username,
self.msg.sender.first_name,
self.msg.created,
'\n> '.join(self.msg.body.split('\n'))
),
}
message_detail.html
<a href="{% url 'user_msgreply' message.id %}" class="btn btn-sm btn-secondary">
<i class="fas fa-reply"></i> 回覆
</a>
Ошибка:
NoReverseMatch at /user/msg/1/
Reverse for 'user_msgreply' with arguments '('',)' not found. 1 pattern(s) tried: ['user/msg/(?P<mid>[0-9]+)/reply/$']
Для шаблонов url я добавил маршрут user_msgreply. Поскольку у меня есть модель MessageStatus, которая будет записывать, когда пользователь прочитал сообщение, поэтому когда я пытаюсь нажать на гиперссылку, шаблон может отображаться как обычно, но после обновления страницы он показывает сообщение об ошибке ниже, и я не мог понять, где проблема, поскольку в html шаблоне я уже поместил параметр, как {% url 'user_msgreply' message.id %}. Может ли кто-нибудь помочь мне разобраться в проблеме?
попробуйте это: {% url 'user_msgreply' request.message.id %}