Faits:
A. Par contrat du 30 mars 1981, la Ville de Genève a remis à bail aux époux X._ et Y._ un appartement de quatre pièces dans un immeuble, à Genève. Le loyer annuel, sans les charges, s'élevait en dernier lieu à 8'088 fr.
Selon un rapport d'entretien du 1er mars 2004 établi par la Gérance Municipale Immobilière, Y._ vit en Espagne depuis 2002 et son époux habite l'appartement avec leur fille, W._ et l'enfant de celle-ci; X._ se prépare à rejoindre son épouse en Espagne et accepte de continuer à payer le loyer; W._ est invitée à s'inscrire d'urgence auprès de la gérance.
Du 30 mars 2004 au 30 mars 2006, X._ a été au bénéfice d'une autorisation d'absence délivrée par l'Office cantonal de la population.
Par courrier du 3 mai 2005, le Centre d'action sociale et de la santé des Pâquis a demandé à la Ville de Genève de transférer le bail au nom de W._, en précisant que X._ logeait dans l'appartement lors de ses visites en Suisse.
Par lettre du 30 mai 2005, la Ville de Genève a refusé le transfert du bail au motif que W._ ne s'était pas inscrite auprès de ses services et qu'un ordre de priorité, tenant compte de la date d'inscription, devait être respecté dans l'attribution des logements. Un formulaire d'inscription était joint au courrier.
Le lendemain, la Ville de Genève a résilié le bail pour son terme contractuel du 30 septembre 2005. Dans un pli du 20 juin 2005, elle a précisé que le congé était motivé par le départ des locataires à l'étranger et l'absence d'inscription de leur fille pour l'attribution d'un appartement.
B. X._ et Y._ ont contesté la validité de la résiliation. Ils concluaient à la constatation de la nullité du congé, subsidiairement à l'annulation de la résiliation et, plus subsidiairement, à une prolongation du bail de quatre ans. Ils faisaient valoir que le congé n'avait pas été signé par le Conseil administratif de la Ville de Genève et que X._ vivait encore régulièrement avec sa fille dans l'appartement au moment de la résiliation.
La Commission de conciliation a constaté la nullité du congé.
La Ville de Genève a porté la cause devant le Tribunal des baux et loyers du canton de Genève, qui a statué sans procéder à des enquêtes ni entendre les parties. Par jugement du 23 mars 2007, le tribunal a déclaré le congé valable et refusé d'accorder une prolongation de bail aux locataires.
Statuant le 10 décembre 2007, la Chambre d'appel en matière de baux et loyers du canton de Genève a déclaré irrecevable l'appel formé par X._ et Y._, faute d'un intérêt juridique et actuel des locataires «à faire constater leur droit de rester dans l'appartement litigieux».
C. X._ et Y._ interjettent un recours en matière civile. Ils demandent au Tribunal fédéral d'annuler l'arrêt du 10 décembre 2007 puis, principalement, de renvoyer la cause à la cour cantonale pour instruction et jugement au fond. A titre subsidiaire, ils concluent à la constatation de la nullité du congé ou à son annulation ou encore à la prolongation du bail jusqu'au 30 septembre 2009.
Par ordonnance du 25 février 2008, le Président de la cour de céans a accordé au recours l'effet suspensif réclamé par les locataires.
La Ville de Genève propose que le recours soit déclaré irrecevable, voire rejeté.

Considérant en droit:
1. Le Tribunal fédéral examine d'office et librement la recevabilité des recours qui lui sont soumis (<ref-ruling> consid. 2 p. 630 et les arrêts cités).
1.1 L'intimée nie l'intérêt juridique des recourants à saisir le Tribunal fédéral.
Aux termes de l'<ref-law>, la qualité pour former un recours en matière civile suppose d'avoir pris part à la procédure devant l'autorité précédente ou d'avoir été privé de la possibilité de le faire (let. a) ainsi que d'avoir un intérêt juridique à l'annulation ou à la modification de la décision attaquée (let. b). Ces conditions sont remplies en l'espèce. D'une part, les recourants étaient parties à la procédure cantonale. D'autre part, le refus d'entrer en matière sur leur appel et d'examiner la cause au fond met indéniablement en cause l'intérêt juridique des recourants, Au demeurant, le litige a trait à la validité d'un congé signifié à des locataires et, subsidiairement, à la prolongation d'un bail. Il s'agit donc d'une affaire civile «proprement dite», dans laquelle la qualité pour recourir au sens de l'<ref-law> est reconnue à la partie qui a pris part à l'instance précédente et qui a succombé dans ses conclusions (<ref-ruling> consid. 1.1). Les recourants disposent dès lors de la qualité pour recourir au Tribunal fédéral.
1.2 Le recours est dirigé contre un jugement final (<ref-law>) rendu en matière civile (<ref-law>) par une autorité cantonale de dernière instance (<ref-law>).
Au fond, la contestation porte principalement sur la validité d'une résiliation de bail. En pareil cas, la valeur litigieuse se détermine selon le loyer dû pour la période durant laquelle le contrat subsiste nécessairement, en supposant que l'on admette la contestation, et qui s'étend jusqu'au moment pour lequel un nouveau congé aurait pu être donné ou l'a été effectivement (<ref-ruling> consid. 1 p. 149; <ref-ruling> consid. 1 p. 386). Lorsque le bail bénéficie de la protection contre les congés des <ref-law>, il convient, sauf exceptions, de prendre en considération la période de trois ans prévue à l'art. 271a al. 1 let. e CO (cf. ATF <ref-ruling> consid. 1 p. 386; arrêt 4C.264/2002 du 25 août 2003, consid. 1.1, reproduit in SJ 2004 I p. 93; sous le nouveau droit de procédure fédéral, entre autres, arrêt 4A_277/2007 du 26 septembre 2007, consid. 2). Comme le loyer annuel payé par les recourants s'élève à plus de 8'000 fr., la valeur litigieuse de 15'000 fr. exigée par l'<ref-law> pour les contestations relatives à un bail à loyer est atteinte en l'espèce.
Pour le surplus, déposé dans le délai (<ref-law>) et la forme (<ref-law>) prévus par la loi, le recours est recevable.
2. La cour cantonale a déclaré irrecevable l'appel interjeté par les recourants. Elle a jugé que ceux-ci n'avaient pas d'intérêt juridique actuel à contester la validité de la résiliation ou à obtenir la prolongation du bail dès lors qu'ils étaient désormais domiciliés en Espagne et qu'ils n'avaient pas allégué vouloir habiter à nouveau en Suisse.
2.1 Selon les recourants, qui invoquent l'art. 9 Cst., il est arbitraire de nier l'intérêt du locataire à contester le congé simplement parce que ledit preneur n'occupe plus le logement en cours de procédure. Ils font valoir que la décision de première instance confirmant la validité de la résiliation mettait fin à un contrat auquel ils étaient parties et que leurs droits de locataires, en particulier celui de sous-louer, ont été supprimés. Ils estiment dès lors avoir un intérêt juridique actuel à remettre en cause le jugement du Tribunal des baux et loyers.
Les recourants se plaignent également d'une application arbitraire de la loi de procédure civile genevoise (LPC/GE) qui, selon eux, ne prévoirait pas l'exigence d'un intérêt juridiquement protégé pour former appel d'un jugement du Tribunal des baux et loyers.
2.2 Ni les art. 443 à 445 LPC/GE relatifs à l'appel des jugements du Tribunal des baux et loyers, ni les <ref-law>/GE qui réglementent l'appel en général, ne mentionnent expressément l'intérêt juridique au recours comme condition de recevabilité de l'appel. Il est toutefois admis que, comme pour tout recours, une personne ne peut appeler d'un jugement que si elle dispose d'un intérêt juridiquement protégé à le faire (Bertossa/Gaillard/Guyet/Schmidt, Commentaire de la LPC/GE, volume II, n. 13 ad art. 291).
Les recourants fondent leur intérêt à appeler du jugement du Tribunal des baux et loyers sur leur qualité de parties au bail à loyer, lequel est régi par le droit fédéral. Lorsque le droit fédéral est en jeu, le droit cantonal ne doit pas empêcher le Tribunal fédéral de pouvoir contrôler librement son application dans un tel litige, en vertu du principe de la primauté du droit fédéral (art. 49 Cst.) (cf. <ref-ruling>). Sous l'empire de l'OJ, le Tribunal fédéral avait posé qu'une autorité cantonale ne pouvait pas refuser d'entrer en matière sur un recours faute d'intérêt, lorsqu'il aurait existé un intérêt juridique à interjeter un recours en réforme; en particulier, la notion d'intérêt juridique ne devait pas être interprétée de manière plus restrictive en droit cantonal qu'en droit fédéral (arrêt 4P.137/2003 du 17 novembre 2003, consid. 2.2). Ce principe se retrouve aujourd'hui à l'<ref-law>, aux termes duquel la qualité de partie à la procédure devant toute autorité cantonale précédente doit être reconnue à quiconque a qualité pour recourir devant le Tribunal fédéral. En l'espèce, cela signifie que l'intérêt à l'appel doit se comprendre dans le même sens que l'intérêt juridique mentionné à l'<ref-law> (cf. Bernhard Ehrenzeller, Basler Kommentar, n. 4 ad <ref-law>) et que la cour de céans peut revoir la question librement, et non sous l'angle restreint de l'arbitraire dans l'application du droit cantonal.
2.3 La mention expresse de l'intérêt juridique à l'<ref-law> n'a pas modifié fondamentalement les règles jurisprudentielles consacrées sous l'ancien droit de procédure fédéral (Bernard Corboz, Introduction à la nouvelle loi sur le Tribunal fédéral, in SJ 2006 II p. 350; Denis Tappy, Le recours en matière civile, in La nouvelle loi sur le Tribunal fédéral, CEDIDAC 2007, p. 89/90). L'intérêt juridique suppose que le recourant soit lésé par la décision attaquée, plus particulièrement par son dispositif. Il y a lésion formelle (formelle Beschwer) lorsque la partie n'a pas obtenu le plein de ses conclusions. Mais il faut en plus une lésion matérielle (materielle Beschwer): le jugement attaqué doit atteindre les droits de la partie et lui être défavorable quant à ses effets juridiques; en principe, un tel intérêt existe en cas de lésion formelle (arrêt précité du 17 novembre 2003, consid. 2.1 et les références; Kathrin Klett, Basler Kommentar, n. 1 ad <ref-law>). Pour les parties principales au procès, l'intérêt juridiquement protégé résulte de leur propre implication matérielle dans le litige ou de droits de procédure accordés par la loi (Klett, op. cit., n. 5 ad <ref-law>).
2.4 En l'espèce, le Tribunal des baux et loyers a rejeté les conclusions des locataires en nullité, respectivement en annulation de la résiliation, ainsi que celles en prolongation du bail. Les recourants ont donc été lésés formellement par le dispositif du jugement qu'ils contestaient en appel.
En principe, cette lésion formelle implique une lésion matérielle. La cour cantonale a toutefois jugé que tel n'était pas le cas. Elle n'a pas établi si le recourant X._ occupait encore régulièrement le logement loué au moment de la résiliation. En revanche, elle a constaté que les recourants étaient domiciliés en Espagne lors du dépôt de leur appel et qu'ils n'avaient pas allégué avoir l'intention de revenir en Suisse. Elle en a déduit qu'ils n'avaient pas d'intérêt actuel à recourir contre la décision confirmant la validité du congé et refusant la prolongation du bail.
Les recourants sont parties à un contrat de bail qui leur confère des droits et des obligations. Si ce contrat est résilié par la bailleresse, la situation juridique des locataires est manifestement atteinte: ils perdent les droits liés au bail, indépendamment de la question de savoir s'ils occupent ou non le logement en cause. Par exemple, les droits du locataire comprennent la sous-location avec le consentement du bailleur, qui ne peut le refuser qu'à des conditions déterminées (<ref-law>). Dans le cas particulier, les preneurs allèguent du reste avoir sous-loué l'appartement à leur fille avec le consentement implicite de la bailleresse. Or, par définition, ce droit s'exerce alors que le locataire n'occupe pas le logement loué.
Il faut donc reconnaître aux recourants un intérêt juridiquement protégé à contester la décision qui confirme la validité du congé et refuse la prolongation du bail. La cour cantonale tire un parallèle avec le cas du bailleur qui recourt contre un refus d'expulsion alors que le locataire a déjà quitté les lieux. L'analogie n'est pas pertinente. Le bailleur n'a plus d'intérêt actuel à recourir car il a obtenu satisfaction dans les faits (<ref-ruling> consid. 2). Ce n'est pas le cas des recourants qui entendent, eux, poursuivre le bail et n'ont pas été exaucés. Les raisons pour lesquelles les locataires s'opposent à la fin du contrat n'apparaissent pas plus déterminantes pour juger de l'intérêt au recours. Elles peuvent en revanche être pertinentes pour juger du fond du litige, sous l'angle d'un éventuel abus de droit.
C'est le lieu de relever que, dans les considérants de la décision entreprise, la Chambre d'appel observe, en une phrase, que même s'il était recevable, l'appel serait mal fondé par identité de motifs. Il ne s'agit pas là d'une motivation alternative à prendre en compte par le Tribunal fédéral, dès lors que, dans le dispositif de l'arrêt attaqué, la cour cantonale prononce l'irrecevabilité de l'appel.
En conclusion, la cour cantonale a, dans le cas particulier, interprété la notion d'intérêt juridique à l'appel d'une manière contraire au droit fédéral. Le recours doit être admis pour ce motif, de sorte qu'il n'y a pas lieu d'examiner les autres griefs développés par les recourants. L'arrêt attaqué sera annulé et la cause renvoyée à la cour cantonale afin qu'elle se prononce au fond sur l'appel déposé par les locataires.
3. Agissant en qualité de bailleresse dont l'intérêt patrimonial est manifestement en cause, l'intimée, qui succombe, prendra à sa charge les frais judiciaires (art. 66 al. 1 et 4 LTF). En outre, elle versera des dépens aux recourants (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est admis, l'arrêt attaqué est annulé et la cause est renvoyée à la cour cantonale pour nouvelle décision.
2. Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de l'intimée.
3. L'intimée versera aux recourants, créanciers solidaires, une indemnité de 2'500 fr. à titre de dépens.
4. Le présent arrêt est communiqué aux parties et à la Chambre d'appel en matière de baux et loyers du canton de Genève.
Lausanne, le 9 avril 2008
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
Le Président: La Greffière:
Corboz Godat Zimmermann