Mengapa file html dikonversi dari file pertama yang mengandung tanda tanya tidak dapat ditampilkan di browser kapan harus mengklik katalog?

14

Silakan unduh file simple.7zdan instal di sphinx Anda untuk mereproduksi masalah apa yang saya jelaskan di sini, untuk mereproduksinya, Anda dapat menjalankan:

make clean
make html   

unduh dan instal di sphinx Anda untuk mereproduksi masalah

Ada dua artikel di dalam sample/source, isinya sama, hanya perbedaan judulnya.

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

Satu berisi ?di dalamnya, yang lain tidak mengandung ?. Hal aneh terjadi setelah berlari 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

silakan lihat ubin setelah menjalankan <code> make html </code> Masalah 1:
Mengapa firefox menunjukkan semua itu sebagai What does “_” in Python mean in a for-loop? Catatan: "_"digabungkan menjadi “_”;
Judul yang tidak mengandung ?seperti What does "_" in Python mean in a for-loop.htmlitu dikompilasi ke dalam What does “_” in Python mean in a for-loop?, yang menambahkannya ??

Masalah 2: Untuk mengklik judul pertama What does “_” in Python mean in a for-loop? , browser beralih ke statusno url was not found on this server

tidak ada url yang ditemukan di server ini saat mengklik judul pertama Untuk mengklik judul kedua What does “_” in Python mean in a for-loop? , itu berfungsi dengan baik. berfungsi dengan baik kapan harus mengklik judul kedua

Tolong beri penjelasan tentang masalah saya.

kasar
sumber
1
Tolong tunjukkan reStructuredText Anda dari mana Sphinx menghasilkan HTML ini.
Steve Piercy
print(“Hello”)??? Anda perlu mematikan kutipan "pintar".
kthy

Jawaban:

6

Masalah 1 sebenarnya bukan masalah, itu adalah perilaku normal Sphinx: Judul yang ditampilkan bukan nama file tetapi judul tingkat atas dari dokumen ResT, yang diakhiri dengan tanda tanya di kedua kasus. Lihat Daftar Isi > .. toctree :: > Entri pada halaman ini yang menyatakan:

Judul dokumen dalam toctree akan secara otomatis dibaca dari judul dokumen yang direferensikan.

Jika Anda perlu diyakinkan, ubah saja judul dokumen mana saja, bangun kembali HTML dan lihat.


Masalah 2 disebabkan oleh adanya tanda tanya yang tidak ditentukan dalam hreftautan. Dalam url, tanda tanya berarti awal dari string kueri .

Itu sedang mencoba mengakses What does "_" in Python mean in a for-loop?.html, berarti meminta What does "_" in Python mean in a for-loopdokumen HTML, memberinya.html parameter. Dan jelas, dokumen yang diminta tidak ditemukan karena tidak ada.

Di bilah alamat browser Anda, Anda dapat mengganti tanda tanya dengan bentuk urlencodenya %3F , dan mengamati itu berfungsi kemudian.

Saya tidak menemukan cara untuk membuat sphinx secara otomatis urlencode nama dokumen dalam tautan href( sebenarnya dianggap sebagai bug ) atau dokumen apa pun yang secara jelas menyatakan pembatasan penamaan untuk dokumen ResT.

Tapi saya tahu dari pengalaman bahwa penamaan file dengan tanda baca sering menjadi sumber masalah . Saya akan menyarankan Anda untuk mengubah nama dokumen Anda dengan karakter yang kurang eksotis (slugify mereka). Memberi nama dokumen ResT Anda underscore_in_for_loop.rstbukannya What does "_" in Python mean in a for-loop?.rstakan menghemat banyak waktu dan sakit kepala.

Dan ingat bahwa itu seharusnya tidak menjadi masalah karena, seperti yang kita lihat dalam edisi pertama, nama dokumen hanya digunakan untuk URL.

Tryph
sumber
4

?adalah wildcard untuk pencocokan kata bagian dalam URL dan karenanya akan diperlakukan sebagai karakter khusus.

wild card beroperasi dengan dua jenis pelawak:

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

Untuk ini, Anda harus Menyandikan URL

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

Di Python 3.x, Anda perlu mengimpor urllib.parse.quote:

import urllib.parse
urllib.parse.quote(<<url>>)
Sreeram Nair
sumber
2
wildcard beroperasi dengan 2 pelawak
Sreeram Nair
Saya pikir itu ?diperlakukan sebagai wildcard dan karenanya tidak mengubahnya ke %3fdalam URL.
Sreeram Nair
5
Itu adalah bug untuk python-sphinx.
kotor
apa hubungan antara adroll doc tertaut dan sphinx ...?
Tryph