nền
Hãy nói rằng tôi có một mẫu url với các thông số đó sẽ liên kết tôi đến một cái nhìn trong django:Django - nhận tên của thông số cần thiết để đảo ngược url
url(
r'^things/(?P<thing_name>\w+)/features/(?P<feature_name>\w+)$',
views.thingFeature,
name='thing_feature'
),
Và cho phép nói rằng tôi có một thing
và feature
:
thing = Thing.objects.get(.....)
feature = thing.feature_set.first()
t_name = thing.name
f_name = feature.name
Bây giờ Django mang lại cho tôi khả năng tuyệt vời để có được một url mà mang lại cho tôi một trang dành riêng cho một tính năng cụ thể của một t cụ thể Hing. Tôi có thể làm điều đó như sau:
from django.core.urlresolvers import reverse
url = reverse('thing_feature', thing_name=t_name, feature_name=f_name)
# url == '/things/thing2/features/left-arm'
Câu hỏi
Bây giờ tôi đã vấp vào một tình huống mà tôi cần phải giải quyết cụ thể. Tôi không tìm cách giải quyết - Tôi đang tìm cách giải quyết vấn đề sau:
Cho địa chỉ name
của url, làm cách nào để có danh sách các tên đối số kwarg
cần thiết để đảo ngược url đó?
Tôi đang tìm hàm get_kwarg_names_for_url
. Nó hoạt động như vậy:
url_kwarg_names = get_kwarg_names_for_url('thing_feature')
# url_kwarg_names == ['thing_name', 'feature_name']
url_kwarg_names
bây giờ là danh sách của tất cả các từ khóa Tôi cần phải cung cấp cho reverse
chức năng của Django để đảo ngược url tên "thing_feature"
.
Mọi trợ giúp đều được đánh giá cao!
Giải pháp
Dựa trên câu trả lời knbk của tôi đã có thể đưa ra các giải pháp sau đây:
def get_kwarg_names_for_url(url_name):
resolver = get_resolver(get_urlconf())
reverse_data = resolver.reverse_dict[url_name]
pattern_list = reverse_data[0]
'''
Need to specify the 1st pattern because url regexes can
potentially have multiple kwarg arrangments - this function does
not take this possibility into account.
'''
first_pattern = pattern_list[0]
'''
`first_pattern` is now of the form `(url_string, kwarg_list)` -
all we are interested in is the 2nd value.
'''
return first_pattern[1]
Tôi vừa đi xuống một lỗ thỏ: đảo ngược url, khớp url với urlpattern, biên dịch regex urlpattern và kiểm tra 'groupindex' của regex ... Tôi đã bị thiếu thứ gì đó ở đây. – Monkpit
Một vấn đề là bạn không thể đảo ngược url trước khi bạn đã biết tên tham số url bắt buộc - django sẽ tăng lỗi cho 'reverse ('thing_feature')' bởi vì nó thiếu các kwarg cần thiết! –
Bạn có thể thử http://stackoverflow.com/a/1275601 này. Tôi đã thử bản thân mình ở đây và sử dụng '.items()' để thay thế, nó trả về một danh sách tốt các bộ dữ liệu có các kwarg. Bạn phải đi sâu hơn có vẻ là một khởi đầu tốt, tiếc là tôi sẽ về nhà ngay bây giờ và không thể đi sâu hơn. –
Tiago