2013-04-30 23 views
5

Có ai biết cách loại bỏ tiền tố 'http: //' trong vùng url Django hay không.django urlfield http prefix

Tôi muốn nói khi chúng tôi xác định trường dưới dạng urlfield và cố nhập url vào nó, django sẽ tự động thêm tiền tố 'http: //' vào nó nếu không có lược đồ nào cung cấp. Tôi không muốn tiền tố đó.

Tôi cố gắng xóa nó theo phương pháp clean_field và clean. Nó không hoạt động.

Tôi tìm hiểu mã nguồn. Tôi thấy rằng django thêm 'http: //' vào phương thức 'to_python' trong lớp UrlField.

Có cách nào để ghi đè lên nó để loại bỏ 'http: //' không?

Trả lời

4

Không có tiền tố lược đồ, chuỗi không thể là URL thực và do đó, URLField sẽ không hỗ trợ nó.

Tuy nhiên, URLField là khá nhiều chỉ là một CharField với một URLValidator, vì vậy nếu bạn viết một mới SchemelessURLValidator (có nguồn gốc từ được xây dựng trong một) và thêm rằng đến một bình thường CharField, mà nên đưa bạn đến nơi bạn muốn đi.

Trong thực tế, xác nhận mới của bạn có thể đơn giản như

class SchemelessURLValidator(URLValidator): 
    regex = re.compile(
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain... 
    r'localhost|' # localhost... 
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4 
    r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6 
    r'(?::\d+)?' # optional port 
    r'(?:/?|[/?]\S+)$', re.IGNORECASE) 
+0

này nghe có vẻ giống như một giải pháp chấp nhận được. Cảm ơn –

+0

Tôi đã thử. Ít nhất là trong Django 1.5, nó trở thành một mớ hỗn độn lớn. Tuy nhiên, nó hoạt động. – alanjds

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