radbryt i Plane1.cgi

  • Författare
  • Meddelande

JesusF

html-kodare

  • Inlägg: 12
  • Blev medlem: 19 jan 2015, 01:15

radbryt i Plane1.cgi

Inlägg09 feb 2015, 00:47

Min fil är klar och fungerar som den ska i browsern. Det enda som inte riktigt fungerar är presentationen av omräkningarna. Dessa skrivs ut på en rad istället för på separata rader. Jag har försökt med olika varianter av \n men inte lyckats.

Jag får 3608.924feet 621.37mph -58.0Fahrenheit-58.0Fahrenheit istället för

3608.924feet

621.37mph

-58.0Fahrenheit

-58.0Fahrenheit

FILINNEHÅLLET NEDAN:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Execute as cgi-skript and send a correct HTTP header.
"""

# To write pagecontent to sys.stdout as bytes instead of string
import sys
import codecs

# Enable debugging of cgi-.scripts
import cgitb
cgitb.enable()

# Send the HTTP header for plain text or for html
#print("Content-Type: text/plain;charset=utf-8")
print("Content-Type: text/html;charset=utf-8")
print("")

# Here comes the content of the webpage
content = """<!doctype html>
<meta charset="utf-8">
<title>Plane information</title>
<pre>

Conversions of elevation, speed and temperature.

Hur många meter över havet?
1100

Hur många kilometer per timme, km/h?
1000

Hur många grader celsius är det utanför planet?
-50

Konverterade resultat:
</pre>
"""


h = 1100 * 3.28084
v = 1000 * 0.62137
t = -50 * (9/5) + 32

import fractions
a = fractions.Fraction(9, 5)
temperatur = (float(-50) * a) + 32

content += str(h) + "feet"

content += str(v) + "mph"

content += str(t) + "Fahrenheit"

content += str(temperatur) + "Fahrenheit"

# Write page content
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
sys.stdout.write(content)
Användarvisningsbild

Sylvanas

dbwebb

  • Inlägg: 1133
  • Blev medlem: 16 nov 2011, 17:03
  • Ort: Karlskrona

Re: radbryt i Plane1.cgi

Inlägg09 feb 2015, 09:30

Du behöver lägga in radbrytningar på de rader där du endast lägger in en enkelt sträng på content (enkel sträng är den innanför "", medan den som börjar och slutar med tre """ hanterar nya rader).
Kod: Markera allt
content += str(h) + "feet\n"

Notera alltså \n som betyder newline, ny rad.
Brain - "Are you pondering what I'm pondering?"
Pinky - "I think so, Brain, but there's still a bug stuck in here from last time."

JesusF

html-kodare

  • Inlägg: 12
  • Blev medlem: 19 jan 2015, 01:15

Re: radbryt i Plane1.cgi

Inlägg09 feb 2015, 17:39

Tyvärr funkar inte det. Det var en av varianterna jag provade men som sagt ingen skillnad.


Jag testade med följande ändring allt annat lika filen nedan.

content += str(h) + "feet\n"

content += str(v) + "mph\n"

content += str(t) + "Fahrenheit\n"

content += str(temperatur) + "Fahrenheit\n"
Användarvisningsbild

joaj14

troubleshooter

  • Inlägg: 457
  • Blev medlem: 19 aug 2014, 18:32
  • Ort: Helsingborg

Re: radbryt i Plane1.cgi

Inlägg09 feb 2015, 17:56

Hej,

Kör du detta lokalt eller på studentservern?

Om du kör det lokalt så kanske du har en annan typ av radslut, så testa då med såväl '\r\n' som enbart '\r' och se om det ger någon skillnad.


Mvh,
Johan - fellow student
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: radbryt i Plane1.cgi

Inlägg09 feb 2015, 19:29

Länka till ditt cgi-skript.
...
..:
.... /mos

JesusF

html-kodare

  • Inlägg: 12
  • Blev medlem: 19 jan 2015, 01:15

Re: radbryt i Plane1.cgi

Inlägg10 feb 2015, 17:10

Hej

Johan

Jag kör den på studentservern och har unix radbrytning i jEditorn inställd på \n.


Mikael

Här är länken.

http://www.student.bth.se/~jefe15/dbweb ... netest.cgi

Kommer att byta namn på filen när allt funkar som det ska.
Användarvisningsbild

tode15

sql-kodare

  • Inlägg: 58
  • Blev medlem: 12 jan 2015, 16:30

Re: radbryt i Plane1.cgi

Inlägg10 feb 2015, 18:05

Problemet är att du använder HTML för presentation, vilket innebär att du normalt måste använda <br> för radbrytning. Du har undkommit detta genom att placera din output inom <pre></pre>, men den sista biten hamnar utanför dessa taggar. Så fixa in den sista outputten inom <pre> taggen så kommer dina \n fungera som de ska:

Kod: Markera allt
<!doctype html>
<meta charset="utf-8">
<title>Plane information</title>
<pre>

Conversions of elevation, speed and temperature.

Hur många meter över havet?
1100 m

Hur många kilometer per timme, km/h?
1000 km/h

Hur många grader celsius är det utanför planet?
-50 C

Konverterade resultat:
</pre>
3608.924feet
621.37mph
-58.0Fahrenheit
-58.0Fahrenheit


bör alltså bli:

Kod: Markera allt
<!doctype html>
<meta charset="utf-8">
<title>Plane information</title>
<pre>

Conversions of elevation, speed and temperature.

Hur många meter över havet?
1100 m

Hur många kilometer per timme, km/h?
1000 km/h

Hur många grader celsius är det utanför planet?
-50 C

Konverterade resultat:
3608.924feet
621.37mph
-58.0Fahrenheit
-58.0Fahrenheit
</pre>

JesusF

html-kodare

  • Inlägg: 12
  • Blev medlem: 19 jan 2015, 01:15

Re: radbryt i Plane1.cgi

Inlägg11 feb 2015, 20:56

Hej

Tack för tipset. Men det innebär då att resultaten visas 2ggr, både vid uträkningarna som förut dvs. på rad och på olika rader. Som jag uppfattade uppgiften så ska resultaten visas på olika rader som en direkt följd av uträkningarna. För att få HTML formatet att funka måste man helt enkelt stoppa in resultaten som text (string) eftersom fältet mellan <pre> och <\pre> bara definierar text. För att få det här att fungera måste man ju då ta bort formlerna och då verkar hela uppgiften konstig. Jag vet att vi på den här kursen inte läser HTML och att det finns sätt att köra och presentera uträkningar i HTML men det är utanför denna kurs.

Därför har jag gjort om Plane1.cgi till text format och det funkar som väntat.
Användarvisningsbild

tode15

sql-kodare

  • Inlägg: 58
  • Blev medlem: 12 jan 2015, 16:30

Re: radbryt i Plane1.cgi

Inlägg11 feb 2015, 21:57

Jag vet inte hur det är att köra plaintext istället för HTML, det får nån lärare ha synpunkter på, men jag kan visa hur du kunnat göra om det.

Här har du en variant baserad på din kod (tog bort lite delar för att göra det kortare):
Kod: Markera allt
# Here comes the content of the webpage
content = """<!doctype html>
<meta charset="utf-8">
<title>Plane information</title>
<pre>

Konverterade resultat:
<!-- Det fanns en </pre> här, den är borta nu -->
"""

h = 1100 * 3.28084
v = 1000 * 0.62137
t = -50 * (9/5) + 32

import fractions
a = fractions.Fraction(9, 5)
temperatur = (float(-50) * a) + 32

content += str(h) + "feet"
content += str(v) + "mph"
content += str(t) + "Fahrenheit"
content += str(temperatur) + "Fahrenheit"
# Lägg till </pre> efter output
content += "</pre>"

# Write page content
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
sys.stdout.write(content)


Den här är lite annorlunda, men är också ett sätt:
Kod: Markera allt
# Here comes the content of the webpage
content = """<!doctype html>
<meta charset="utf-8">
<title>Plane information</title>
<pre>

Konverterade resultat:
{h} feet
{v} mph
{t} Fahrenheit
{temp} Fahrenheit
</pre>
"""

h = 1100 * 3.28084
v = 1000 * 0.62137
t = -50 * (9/5) + 32

import fractions
a = fractions.Fraction(9, 5)
temperatur = (float(-50) * a) + 32

# Write page content
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
sys.stdout.write(content.format(h=str(h), v=str(v), t=str(t), temp=str(temperatur)))

JesusF

html-kodare

  • Inlägg: 12
  • Blev medlem: 19 jan 2015, 01:15

Re: radbryt i Plane1.cgi

Inlägg11 feb 2015, 23:15

Hej

Tack för tipset. Satt själv och försökte hitta på nätet mer info om HTML för att klara det här men kan inte HTML så bra. Har lite kunskaper i det. Dock kommer ju HTML senare i programmet så det kan vara bra att kunna.
:D
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: radbryt i Plane1.cgi

Inlägg12 feb 2015, 13:11

Plain text blir jättebra. Behövs ingen HTML, även om det är en delvis relevant sak (som förekommer i andra kurser här).
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Bing [Bot] och 10 gäster