Django Terbalik dengan argumen '()' dan argumen kata kunci '{}' tidak ditemukan


144

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?


di Django terbaru , reverse diimpor dari url. yaitufrom django.urls import reverse
suhailvs

Jawaban:



6

Solusi @ miki725 benar-benar benar. Atau, jika Anda ingin menggunakan argsatribut yang bertentangan kwargs, maka Anda cukup mengubah kode Anda sebagai berikut:

project_id = 4
reverse('edit_project', args=(project_id,))

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'.


1
Saya suka singkatnya.
Bartleby

2

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:

from django.test import Client
from django.core.urlresolvers import reverse

#app name - name of the app where the url is defined
client= Client()
response = client.get(reverse('app_name:edit_project', project_id=4)) 

1
Saya baru saja mencoba ini, tidak berhasil. @ miki725 jawaban sudah benar.
Daniel van Flymen

1
Saya percaya brace ada di tempat yang salah: response = client.get (terbalik ('edit_project', project_id = 4))
Wim Feijen

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.