Tại sao tệp html được chuyển đổi từ tệp đầu tiên có chứa dấu hỏi không thể hiển thị trên trình duyệt khi nhấp vào danh mục?


14

Vui lòng tải xuống tệp simple.7zvà cài đặt trong nhân sư của bạn để tái tạo các vấn đề tôi mô tả ở đây, để sao chép nó, bạn có thể chạy:

make clean
make html   

tải xuống và cài đặt trong nhân sư của bạn để tái tạo các vấn đề

Có hai bài viết sample/source, nội dung giống nhau, chỉ khác là tiêu đề.

cd  sample
ls source |grep  "for-loop"
What does "_" in Python mean in a for-loop.rst
What does "_" in Python mean in a for-loop?.rst

Một cái chứa ?trong đó, cái kia không chứa ?. Chuyện lạ xảy ra sau khi chạy make html.

make html
ls build/html|grep  "for-loop"
What does "_" in Python mean in a for-loop.html
What does "_" in Python mean in a for-loop?.html

vui lòng xem lát sau khi chạy <code> tạo html </ code> Vấn đề 1:
Tại sao firefox hiển thị tất cả sau đó như What does “_” in Python mean in a for-loop? Lưu ý: "_"đã được kết hợp thành “_”;
Tiêu đề không chứa ?như What does "_" in Python mean in a for-loop.htmlđược biên dịch What does “_” in Python mean in a for-loop?, thêm cái nào ?trong đó?

Vấn đề 2: Để nhấp vào tiêu đề đầu tiên What does “_” in Python mean in a for-loop?, trình duyệt nhảy vào trạng tháino url was not found on this server

không tìm thấy url nào trên máy chủ này khi nhấp vào tiêu đề đầu tiên Để nhấp vào tiêu đề thứ hai What does “_” in Python mean in a for-loop?, nó hoạt động tốt. hoạt động tốt khi nhấp vào tiêu đề thứ hai

Xin hãy giải thích về vấn đề của tôi.


1
Vui lòng hiển thị cấu trúc lại của bạn từ đó Sphinx đã tạo HTML này.
Steve Piercy

print(“Hello”)??? Bạn cần tắt báo giá "thông minh".
kthy

Câu trả lời:


6

Vấn đề 1 thực sự không phải là vấn đề, đó là hành vi bình thường của Sphinx: Tiêu đề được hiển thị không phải là tên tệp mà là tiêu đề cấp cao nhất của tài liệu ResT, được kết thúc bằng dấu chấm hỏi trong cả hai trường hợp. Xem Mục lục > .. :: toctree > Entries phần của trang này mà trạng thái:

Tiêu đề tài liệu trong toctree sẽ được tự động đọc từ tiêu đề của tài liệu được tham chiếu.

Nếu bạn cần phải bị thuyết phục, chỉ cần thay đổi tiêu đề của bất kỳ tài liệu nào, xây dựng lại HTML và xem.


Vấn đề 2 xảy ra do sự hiện diện của một dấu hỏi không được mã hrefhóa trong liên kết. Trong một url, dấu hỏi có nghĩa là bắt đầu một chuỗi truy vấn .

Đó là cố gắng truy cập What does "_" in Python mean in a for-loop?.html, có nghĩa là yêu cầu What does "_" in Python mean in a for-looptài liệu HTML, cung cấp cho nó một .htmltham số. Và rõ ràng, tài liệu được yêu cầu không được tìm thấy vì nó không tồn tại.

Trong thanh địa chỉ của trình duyệt của bạn, bạn có thể thay thế dấu hỏi bằng hình thức urlencoding của nó %3Fvà quan sát nó hoạt động sau đó.

Tôi không tìm thấy bất kỳ cách nào để tạo nhân sư tự động urlencode tên tài liệu trong liên kết href( nó thực sự được coi là một lỗi ) hoặc bất kỳ tài liệu nào thể hiện rõ ràng hạn chế đặt tên cho các tài liệu ResT.

Nhưng tôi biết từ kinh nghiệm rằng việc đặt tên một tệp có dấu câu thường là nguồn gốc của các vấn đề . Tôi sẽ khuyên bạn nên đổi tên tài liệu của bạn với các ký tự ít kỳ lạ hơn (slugify chúng). Đặt tên cho tài liệu ResT của bạn underscore_in_for_loop.rstthay vì What does "_" in Python mean in a for-loop?.rstsẽ giúp bạn tiết kiệm rất nhiều thời gian và đau đầu.

Và hãy nhớ rằng nó không phải là một vấn đề vì như chúng ta đã thấy trong vấn đề đầu tiên, tên tài liệu chỉ được sử dụng cho URL.


4

?ký tự đại diện cho kết hợp từ một phần trong URL và do đó sẽ được coi là một ký tự đặc biệt.

thẻ hoang dã hoạt động với hai loại joker:

  ? - any character  (one and only one)
  * - any characters (zero or more)

Đối với điều này, bạn phải mã hóa URL

import urllib.parse
>>> urllib.parse.quote(<<url>>)

Trong Python 3.x, bạn cần nhập urllib.parse.quote:

import urllib.parse
urllib.parse.quote(<<url>>)

2
wildcard hoạt động với 2 joker
Sreeram Nair

Tôi nghĩ rằng nó ?được coi là ký tự đại diện và do đó nó không chuyển đổi nó %3fthành URL.
Sreeram Nair

5
Đó là một lỗi cho python-sphinx sau đó.
phế liệu

mối quan hệ giữa tài liệu quảng cáo được liên kết và nhân sư ... là gì?
Cố gắng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.