2009-07-14 22 views
5

Tôi muốn sử dụng một số có dấu thập phân trong mẫu URL Django nhưng tôi không chắc liệu nó có thực sự có thể không (tôi không phải là chuyên gia regex).Làm cách nào để sử dụng số thập phân trong mẫu URL Django?

Dưới đây là những gì tôi muốn sử dụng cho URL:

/item/value/0.01 
/item/value/0.05 

Các URL sẽ hiển thị các mục có giá trị từ $ 0.01 hay $ 0,05. Chắc chắn, tôi có thể lấy một cách dễ dàng và chuyển giá trị bằng xu để nó sẽ là/item/value/1, nhưng tôi muốn nhận đối số trong dạng xem của tôi dưới dạng một kiểu dữ liệu thập phân chứ không phải là số nguyên (và Tôi có thể phải đối phó với phân số của một xu tại một số điểm). Có thể viết một regex trong một mẫu URL Django sẽ xử lý này?

Trả lời

13

Nó có thể là một cái gì đó giống như

urlpatterns = patterns('', 
    (r'^item/value/(?P<value>\d+\.\d{2})/$', 'myapp.views.byvalue'), 
    ... more urls 
) 

url không nên bắt đầu với dấu gạch chéo.

hưởng quang cảnh của bạn có thể có chức năng:

def byvalue(request,value='0.99'): 
    try: 
     value = float(value) 
    except: 
     ... 
+0

Vui lòng không sử dụng dấu gạch ngang 'ngoại trừ:' vì điều này sẽ ăn mọi lỗi đơn, thường ẩn các lỗi. Bạn có thể muốn chỉ bắt 'ValueError' (' ngoại trừ ValueError: ') –

13

Tôi không biết về Django đặc biệt, nhưng điều này phải phù hợp với URL:

r"^/item/value/(\d+\.\d+)$" 
+6

Nếu bạn muốn có ints và float trong * one * url, viết một cái gì đó như thế này: 'r '^/item/value/(\ d + (?: \. \ d +)) $" ' – Boldewyn

+0

+1 cho một câu trả lời chung chung hơn (không giới hạn số có hai chữ số sau dấu thập phân) – btk

+0

@Boldewyn giải pháp Ur không hoạt động. Không cho ints cũng không nổi ... tôi đã cố gắng sử dụng nó nhưng không có ích –

3

Nếu các giá trị được chấp nhận chỉ được $ 0.01 hay $ 0.05, mô hình của harto có thể được xác định như thế này:

r"^/item/value/(\d\.\d{2})$" 
+0

Cảm ơn bạn, mỗi bài viết đã thêm một phần nhỏ của câu đố. Evgeny có viên đạn ma thuật. –

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