2012-11-27 27 views
23

Tôi đang cố gắng để di chuyển một ứng dụng django cũ để django 1.5, Có 745 url trong các tập tin html khác nhau như theo cách này:Di chuyển thẻ url để django 1,5

{% url url_name %} 

Nếu tôi không sai, đây đã được chấp nhận và không thể được sử dụng nữa từ django 1,5 (như đã nói here), và tôi phải thay đổi tất cả trong số họ thành:

{% url 'url_name' %} 

Bất kỳ ý tưởng để làm điều này mà không phát điên? Có lẽ, một số loại kịch bản, tôi không biết ... Tôi không thể tưởng tượng một cách để làm điều đó với thay thế trong đường dẫn.

Tôi có thể thiếu điều gì đó hiển nhiên.

Trả lời

38

LƯU Ý: Lệnh này có tính hủy diệt. Sử dụng kiểm soát phiên bản hoặc sao lưu thư mục mẫu của bạn trước khi chạy nó.

Bạn có thể sử dụng sed. Từ thư mục template của bạn (hoặc thư mục) chạy

sed -i -r -e "s#\{% url ([a-zA-Z0-9_.:-]+)#\{% url '\1'#g" * 

Khái niệm phù hợp {% url [view name], vì vậy đối số cung cấp cho các url mẫu thẻ sẽ không bị ảnh hưởng/thay đổi.

Để chạy nó một cách đệ quy,

find . -type f -print0 | xargs -0 sed -i -r -e "s#\{% url ([a-zA-Z0-9_.:-]+)#\{% url '\1'#g" 

lệnh sed này giả định tên tầm nhìn của bạn chỉ chứa chữ cái và số, dấu hai chấm, dấu gạch ngang, dấu chấm và nhấn mạnh - không có ký tự đặc biệt khác. Bây giờ hỗ trợ chế độ xem không gian tên.

Tested chống lại các thẻ trong này Django 1.4 url template tag Gist

+0

Cảm ơn, câu trả lời rất hay, Nó hoạt động như mong đợi. – kastillo

+0

Tôi dường như không làm được điều này. Nó chạm vào tất cả các tập tin nhưng không có thay đổi .. Bất kỳ ý tưởng? –

+0

Chỉnh sửa của Oli đã thay đổi * thành + yêu cầu cờ '-r' cho regex mở rộng (trên máy tính của tôi ít nhất). Tôi đã cập nhật câu trả lời ở trên. – Enrico

2

Ngoài ra còn có một đoạn với một giải pháp trong python tại http://djangosnippets.org/snippets/2905/

Chỉ cần một lời cảnh báo, phát hiện này. -type f -print0 sẽ tìm các tệp bị "ẩn" như tệp trong thư mục .git/hoặc .hg/của bạn và có thể làm hỏng kho lưu trữ hoặc các tệp nhị phân khác của bạn.

Nếu bạn sử dụng quy ước thông thường trong django với các file mẫu của bạn kết thúc bằng .html, bạn có thể tìm kiếm một cách thận trọng hơn với:

find . -iname '*.html' -type f -print > file.list 

kiểm tra file.list đầu tiên để kiểm tra các tập tin đang được sửa đổi trước khi đưa nó cùng với lệnh sed

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