2011-07-05 38 views
12

này rất đơn giản và rõ ràng nhưng tôi không thể làm cho nó đúng:django mẫu url với 2 thông số

Tôi đã chức năng xem sau tuyên bố trong urls.py

(r'^v1/(\d+)$', r'custom1.views.v1'), 

ban đầu tôi đã đi qua một tham số duy nhất cho hàm xem v1. Tôi muốn sửa đổi nó để chuyển 2 tham số. Làm cách nào để khai báo mục nhập trong urls.py để lấy hai tham số?

Trả lời

6

Tôi tin rằng mỗi nhóm trong regex được truyền như một tham số (và bạn có thể đặt tên họ nếu bạn muốn):

(r'^v1/(\d+)/(\d+)/$', r'custom1.views.v1') 

Kiểm tra các ví dụ tại địa chỉ: https://docs.djangoproject.com/en/dev/topics/http/urls/. Bạn cũng có thể đặt tên cho nhóm của mình.

11

Giả sử bạn muốn URL để trông giống như v1/17/18 và lấy hai tham số 1718, bạn chỉ có thể tuyên bố mô hình như:

(r'^v1/(\d+)/(\d+)$', r'custom1.views.v1'), 

Hãy chắc chắn rằng v1 chấp nhận hai đối số ngoài các đối tượng yêu cầu:

def v1 (request, a, b): 
    # for URL 'v1/17/18', a == '17' and b == '18'. 
    pass 

first example trong documentation about the URL dispatcher chứa một số mẫu, phần cuối cùng lấy tham số 2 và 3.

9

Một nơi nào đó dọc theo dòng tôi có thói quen đặt tên chúng trực tiếp trong regex, mặc dù thành thật mà nói tôi không biết liệu nó có tạo sự khác biệt hay không.

#urls: 
(r'^v1/(?P<variable_a>(\d+))/(?P<variable_b>(\d+))/$', r'custom1.views.v1') 

#views: 
def v1(request, variable_a, variable_b): 
    pass 

Ngoài ra, nó rất Django để kết thúc url với một dấu gạch chéo - Django Design Philosophy, FYI

Các vấn đề liên quan