Hai, saya punya masalah yang menyebalkan.
Saya memiliki pola url seperti ini:
# mproject/myapp.urls.py
url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),
itu berfungsi dengan baik di browser tetapi untuk pengujian, ketika saya melakukan ini di shell:
from django.test import Client
from django.core.urlresolvers import reverse
client= Client()
response = client.get(reverse('edit_project'), project_id=4)
Saya mendapatkan yang ditakuti:
NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.
Apa yang kulewatkan di sini?
django
django-testing
Darwin Tech
sumber
sumber
from django.urls import reverse
Jawaban:
Anda harus menentukan
project_id
:Dok disini
sumber
Solusi @ miki725 benar-benar benar. Atau, jika Anda ingin menggunakan
args
atribut yang bertentangankwargs
, maka Anda cukup mengubah kode Anda sebagai berikut:Contohnya dapat ditemukan di dokumentasi . Ini pada dasarnya melakukan hal yang sama, tetapi atribut dilewatkan sebagai argumen. Ingatlah bahwa setiap argumen yang disahkan perlu diberi nilai sebelum dibalik. Cukup gunakan namespace yang benar, yang dalam hal ini adalah
'edit_project'
.sumber
Masalah ini memberi saya sakit kepala hebat ketika saya mencoba menggunakan reverse untuk menghasilkan tautan aktivasi dan mengirimkannya melalui email tentunya. Jadi saya pikir dari tests.py itu akan sama. Cara yang benar untuk melakukan ini adalah sebagai berikut:
sumber
Putuskan juga lebih mudah
Dokumentasi tentang pintasan ini
sumber